Ignore:
Timestamp:
May 14, 2007, 1:08:14 AM (17 years ago)
Author:
dai_9181
Message:

オブジェクトの先頭バッファのサイズを4ポインタ分に拡張した(偶数個数なところがキモ)。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_Object.cpp

    r94 r123  
    121121        op_imul_RV(sizeof(_int64),REG_RAX,typeSize);
    122122
    123         //add rax,PTR_SIZE*3
    124         op_add_RV(REG_RAX,PTR_SIZE*3);
     123        //add rax,OBJECT_HEAD_SIZE
     124        op_add_RV(REG_RAX,OBJECT_HEAD_SIZE);
    125125
    126126        //mov rcx,rax
     
    133133        op_mov_RV(sizeof(_int64),REG_RBX,1);
    134134
    135         //mov rcx,typeSize+PTR_SIZE*3
    136         op_mov_RV(sizeof(_int64),REG_RCX,typeSize+PTR_SIZE*3);
     135        //mov rcx,typeSize+OBJECT_HEAD_SIZE
     136        op_mov_RV(sizeof(_int64),REG_RCX,typeSize+OBJECT_HEAD_SIZE);
    137137    }
    138138
     
    157157    /*
    158158    確保されたヒープ領域のポインタ(callocの戻り値eax)をpPtrとすると、
    159     pPtr-=sizeof(DWORD)*3
     159    pPtr-=OBJECT_HEAD_SIZE ... ( sizeof(DWORD)*4 )
    160160    pPtr[0]=オブジェクトの個数
    161161    pPtr[1]=オブジェクトのサイズ
    162162    pPtr[2]=デストラクタの関数ポインタ
     163    pPtr[3]=reserve
    163164    */
    164165
     
    181182    if( method == NULL ) return;
    182183
    183     //mov rcx,DestructorProcAddr
     184    //mov rcx,DestructorProcAddr(デストラクタの関数ポインタ)
    184185    op_mov_RV(sizeof(_int64),REG_RCX,0);
    185186    obp-=sizeof(long);
     
    191192    op_mov_MR(sizeof(_int64),REG_RCX,REG_RAX,0,MOD_BASE);
    192193
     194    //add rax,PTR_SIZE
     195    op_add_RV(REG_RAX,PTR_SIZE);
     196
     197
     198    // リザーブ領域
    193199    //add rax,PTR_SIZE
    194200    op_add_RV(REG_RAX,PTR_SIZE);
     
    220226    if(!( tempType.IsObjectPtr() || tempType.IsVoidPtr() )) SetError(122,NULL,cp);
    221227
    222     //sub rax,PTR_SIZE*3
    223     op_sub_RV(sizeof(_int64),REG_RAX,PTR_SIZE*3);
     228    //sub rax,OBJECT_HEAD_SIZE
     229    op_sub_RV(sizeof(_int64),REG_RAX,OBJECT_HEAD_SIZE);
    224230
    225231    //mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
     
    244250    op_mov_RM(sizeof(_int64),REG_RDI,REG_RAX,0,MOD_BASE);
    245251
     252    //add rax,PTR_SIZE
     253    op_add_RV(REG_RAX,PTR_SIZE);
     254
     255
     256    // リザーブ領域
    246257    //add rax,PTR_SIZE
    247258    op_add_RV(REG_RAX,PTR_SIZE);
Note: See TracChangeset for help on using the changeset viewer.