Changeset 86 in dev for BasicCompiler64/Compile_ProcOp.cpp


Ignore:
Timestamp:
Mar 30, 2007, 5:12:12 AM (17 years ago)
Author:
dai_9181
Message:

pSubStaticMethod_System_TypeBase_InitializeUserTypesを追加

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_ProcOp.cpp

    r85 r86  
    22#include "Opcode.h"
    33
    4 void SystemProc( const char *name ){
    5     if(lstrcmp(name,"_System_GetEip")==0){
     4void SystemProc( const UserProc &userProc ){
     5    if( userProc.GetName() == "_System_GetEip" ){
    66        //mov rax,qword ptr[rsp]
    77        op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE);
     
    1010        OpBuffer[obp++]=(char)0xC3;
    1111    }
    12     else if(lstrcmp(name,"_System_InitDllGlobalVariables")==0){
     12    else if( userProc.GetName() == "_System_InitDllGlobalVariables" ){
    1313        ////////////////////////////////////////
    1414        // DLLのグローバル領域をコンパイル
     
    6161        OpBuffer[obp++]=(char)0xC3;
    6262    }
    63     else if(lstrcmp(name,"_System_InitStaticLocalVariables")==0){
     63    else if( userProc.GetName() == "_System_InitStaticLocalVariables" ){
    6464        //静的ローカルオブジェクトのコンストラクタ呼び出し
    6565
     
    9595        OpBuffer[obp++]=(char)0xC3;
    9696    }
    97     else if(lstrcmp(name,"_System_Call_Destructor_of_GlobalObject")==0){
     97    else if( userProc.GetName() == "_System_Call_Destructor_of_GlobalObject" ){
    9898        //sub rsp,8(※RSPを16バイト境界にあわせるため)
    9999        op_sub_rsp(0x8);
     
    115115        OpBuffer[obp++]=(char)0xC3;
    116116    }
    117     else if(lstrcmp(name,"_System_GetSp")==0){
     117    else if( userProc.GetName() == "_System_GetSp" ){
    118118        //mov rax,rsp
    119119        op_mov_RR(REG_RAX,REG_RSP);
     
    125125        OpBuffer[obp++]=(char)0xC3;
    126126    }
    127     else if(lstrcmp(name,"_allrem")==0){
     127    else if( userProc.GetName() == "_allrem" ){
    128128        //乗除演算用の特殊関数(64ビット整数対応)
    129129        BYTE Buffer_allrem[]={
     
    134134        obp+=178;
    135135    }
    136     else if(lstrcmp(name,"_allmul")==0){
     136    else if( userProc.GetName() == "_allmul" ){
    137137        //乗算用の特殊関数(64ビット整数対応)
    138138        BYTE Buffer_allmul[]={
     
    143143        obp+=52;
    144144    }
    145     else if(lstrcmp(name,"_alldiv")==0){
     145    else if( userProc.GetName() == "_alldiv" ){
    146146        //除算用の特殊関数(64ビット整数対応)
    147147        BYTE Buffer_alldiv[]={
     
    152152        obp+=170;
    153153    }
    154     else if(lstrcmp(name,"_allshl")==0){
     154    else if( userProc.GetName() == "_allshl" ){
    155155        //符号あり左ビットシフト用の特殊関数(64ビット整数対応)
    156156        BYTE Buffer_allshl[]={
     
    161161        obp+=31;
    162162    }
    163     else if(lstrcmp(name,"_allshr")==0){
     163    else if( userProc.GetName() == "_allshr" ){
    164164        //符号あり右ビットシフト用の特殊関数(64ビット整数対応)
    165165        BYTE Buffer_allshr[]={
     
    170170        obp+=33;
    171171    }
    172     else if(lstrcmp(name,"_aullshr")==0){
     172    else if( userProc.GetName() == "_aullshr" ){
    173173        //符号なし右ビットシフト用の特殊関数(64ビット整数対応)
    174174        BYTE Buffer_aullshr[]={
     
    195195        obp+=31;
    196196    }
     197    else if( userProc.GetName() == "InitializeUserTypes" ){
     198    }
     199    else{
     200        SetError();
     201    }
    197202}
    198203void CompileBufferInProcedure(UserProc *pUserProc){
     
    240245        pobj_sf=new CStackFrame();
    241246
    242         SystemProc(pUserProc->GetName().c_str());
     247        SystemProc(*pUserProc);
    243248
    244249        //スタックフレーム管理用オブジェクトを破棄
Note: See TracChangeset for help on using the changeset viewer.