Changeset 36 in dev for BasicCompiler64/NumOpe_Logical.cpp


Ignore:
Timestamp:
Jan 20, 2007, 4:55:26 AM (17 years ago)
Author:
dai_9181
Message:

Boolean型に対応。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/NumOpe_Logical.cpp

    r3 r36  
    8888    int reg;
    8989
    90     if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
     90    if( type[sp - 1] == DEF_BOOLEAN ){
     91        SetOneTermToReg_Whole32Calc(type[sp-1],&reg);
     92
     93        if( reg != REG_RAX ){
     94            //mov rax,qword ptr[rsp+offset]     ※スタックフレームを利用
     95            pobj_sf->pop(REG_RAX);
     96        }
     97
     98        //cmp reg,0
     99        op_cmp_value(GetTypeSize(type[sp-1],-1),reg,0);
     100
     101        //setne al
     102        op_setne( REG_RAX );
     103
     104        //and rax,000000FFh
     105        op_and64_value(REG_RAX,(int)0xFF);
     106
     107        //neg
     108        op_neg( REG_RAX );
     109
     110        //sbb rax, rax
     111        op_sbb_RR( sizeof(_int64), REG_RAX, REG_RAX );
     112
     113        //add rax, 1
     114        op_add64_value( REG_RAX, 1 );
     115
     116        if( reg != REG_RAX ){
     117            //mov reg,rax
     118            op_mov_RR( reg, REG_RAX );
     119
     120            //mov qword ptr[rsp+offset],rax     ※スタックフレームを利用
     121            pobj_sf->push(REG_RAX);
     122        }
     123
     124        if(reg==REG_R14){
     125            //mov qword ptr[rsp+offset],r14     ※スタックフレームを利用
     126            pobj_sf->push(REG_R14);
     127        }
     128    }
     129    else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
    91130        SetOneTermToReg_Whole64Calc(type[sp-1],&reg);
    92131
Note: See TracChangeset for help on using the changeset viewer.