Ignore:
Timestamp:
Jul 22, 2007, 4:58:47 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_Object.cpp

    r206 r226  
    11#include "stdafx.h"
     2
     3#include <Compiler.h>
    24
    35#include "../BasicCompiler_Common/common.h"
     
    113115        //※添え字上限値であることを考慮
    114116        //add rax,1
    115         op_add_RV(REG_RAX,1);
     117        compiler.codeGenerator.op_add_RV(REG_RAX,1);
    116118
    117119        //オブジェクトの個数をrbxに一時保持
    118120        //※rbxは関数が呼ばれても不変
    119121        //mov rbx,rax
    120         op_mov_RR(REG_RBX,REG_RAX);
     122        compiler.codeGenerator.op_mov_RR(REG_RBX,REG_RAX);
    121123
    122124        //imul rax,size
    123         op_imul_RV(sizeof(_int64),REG_RAX,typeSize);
     125        compiler.codeGenerator.op_imul_RV(sizeof(_int64),REG_RAX,typeSize);
    124126
    125127        //add rax,OBJECT_HEAD_SIZE
    126         op_add_RV(REG_RAX,OBJECT_HEAD_SIZE);
     128        compiler.codeGenerator.op_add_RV(REG_RAX,OBJECT_HEAD_SIZE);
    127129
    128130        //mov rcx,rax
    129         op_mov_RR(REG_RCX,REG_RAX);
     131        compiler.codeGenerator.op_mov_RR(REG_RCX,REG_RAX);
    130132    }
    131133    else{
     
    133135        //※rbxは関数が呼ばれても不変
    134136        //mov rbx,1
    135         op_mov_RV(sizeof(_int64),REG_RBX,1);
     137        compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RBX,1);
    136138
    137139        //mov rcx,typeSize+OBJECT_HEAD_SIZE
    138         op_mov_RV(sizeof(_int64),REG_RCX,typeSize+OBJECT_HEAD_SIZE);
     140        compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RCX,typeSize+OBJECT_HEAD_SIZE);
    139141    }
    140142
     
    145147        //call _System_GC_malloc_ForObject
    146148        extern const UserProc *pSub_System_GC_malloc_ForObject;
    147         op_call(pSub_System_GC_malloc_ForObject);
     149        compiler.codeGenerator.op_call(pSub_System_GC_malloc_ForObject);
    148150    }
    149151    else{
     
    153155        //call _System_GC_malloc_ForObjectPtr
    154156        extern const UserProc *pSub_System_GC_malloc_ForObjectPtr;
    155         op_call(pSub_System_GC_malloc_ForObjectPtr);
     157        compiler.codeGenerator.op_call(pSub_System_GC_malloc_ForObjectPtr);
    156158    }
    157159
     
    168170
    169171    //mov qword ptr[rax],rbx(オブジェクトの個数)
    170     op_mov_MR(sizeof(_int64),REG_RBX,REG_RAX,0,MOD_BASE);
    171 
    172     //add rax,PTR_SIZE
    173     op_add_RV(REG_RAX,PTR_SIZE);
     172    compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RBX,REG_RAX,0,MOD_BASE);
     173
     174    //add rax,PTR_SIZE
     175    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    174176
    175177
    176178    //mov qword ptr[rax],typeSize(オブジェクトのサイズ)
    177     op_mov_MV(sizeof(_int64),REG_RAX,0,NON_OFFSET,typeSize);
    178 
    179     //add rax,PTR_SIZE
    180     op_add_RV(REG_RAX,PTR_SIZE);
     179    compiler.codeGenerator.op_mov_MV(sizeof(_int64),REG_RAX,0,NON_OFFSET,typeSize);
     180
     181    //add rax,PTR_SIZE
     182    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    181183
    182184
     
    185187
    186188    //mov rcx,DestructorProcAddr(デストラクタの関数ポインタ)
    187     op_mov_RV(sizeof(_int64),REG_RCX,0);
     189    compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RCX,0);
    188190    obp-=sizeof(long);
    189191    pobj_SubAddrSchedule->add(&method->GetUserProc(),0);
     
    192194
    193195    //mov qword ptr[rax],rcx
    194     op_mov_MR(sizeof(_int64),REG_RCX,REG_RAX,0,MOD_BASE);
    195 
    196     //add rax,PTR_SIZE
    197     op_add_RV(REG_RAX,PTR_SIZE);
     196    compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RCX,REG_RAX,0,MOD_BASE);
     197
     198    //add rax,PTR_SIZE
     199    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    198200
    199201
    200202    // リザーブ領域
    201203    //add rax,PTR_SIZE
    202     op_add_RV(REG_RAX,PTR_SIZE);
     204    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    203205
    204206
     
    229231
    230232    //sub rax,OBJECT_HEAD_SIZE
    231     op_sub_RV(sizeof(_int64),REG_RAX,OBJECT_HEAD_SIZE);
     233    compiler.codeGenerator.op_sub_RV(sizeof(_int64),REG_RAX,OBJECT_HEAD_SIZE);
    232234
    233235    //mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
     
    236238
    237239    //mov rbx,qword ptr[rax](オブジェクトの個数)
    238     op_mov_RM(sizeof(_int64),REG_RBX,REG_RAX,0,MOD_BASE);
    239 
    240     //add rax,PTR_SIZE
    241     op_add_RV(REG_RAX,PTR_SIZE);
     240    compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RBX,REG_RAX,0,MOD_BASE);
     241
     242    //add rax,PTR_SIZE
     243    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    242244
    243245
    244246    //mov rsi,qword ptr[rax](オブジェクトのサイズ)
    245     op_mov_RM(sizeof(_int64),REG_RSI,REG_RAX,0,MOD_BASE);
    246 
    247     //add rax,PTR_SIZE
    248     op_add_RV(REG_RAX,PTR_SIZE);
     247    compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RSI,REG_RAX,0,MOD_BASE);
     248
     249    //add rax,PTR_SIZE
     250    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    249251
    250252
    251253    //mov rdi,qword ptr[rax](デストラクタの関数ポインタ)
    252     op_mov_RM(sizeof(_int64),REG_RDI,REG_RAX,0,MOD_BASE);
    253 
    254     //add rax,PTR_SIZE
    255     op_add_RV(REG_RAX,PTR_SIZE);
     254    compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RDI,REG_RAX,0,MOD_BASE);
     255
     256    //add rax,PTR_SIZE
     257    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    256258
    257259
    258260    // リザーブ領域
    259261    //add rax,PTR_SIZE
    260     op_add_RV(REG_RAX,PTR_SIZE);
     262    compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    261263
    262264
    263265    //mov rcx,rax
    264     op_mov_RR(REG_RCX,REG_RAX);
     266    compiler.codeGenerator.op_mov_RR(REG_RCX,REG_RAX);
    265267
    266268
     
    280282
    281283    //add rcx,rsi
    282     op_add64_reg(REG_RCX,REG_RSI);
     284    compiler.codeGenerator.op_add64_reg(REG_RCX,REG_RSI);
    283285
    284286    //sub rbx,1
    285     op_sub_RV(sizeof(_int64),REG_RBX,1);
     287    compiler.codeGenerator.op_sub_RV(sizeof(_int64),REG_RBX,1);
    286288
    287289    //jnz ↑
     
    302304        //call _System_GC_free_for_SweepingDelete
    303305        extern const UserProc *pSub_System_GC_free_for_SweepingDelete;
    304         op_call(pSub_System_GC_free_for_SweepingDelete);
     306        compiler.codeGenerator.op_call(pSub_System_GC_free_for_SweepingDelete);
    305307    }
    306308    else{
    307309        //call free
    308310        extern const UserProc *pSub_free;
    309         op_call(pSub_free);
     311        compiler.codeGenerator.op_call(pSub_free);
    310312    }
    311313}
Note: See TracChangeset for help on using the changeset viewer.