Changeset 931

Show
Ignore:
Timestamp:
02/21/07 15:11:35 (2 years ago)
Author:
common
Message:

libemu

  • xor group1 81/83
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libemu/trunk/src/functions/xor.c

    r930 r931  
    288288int32_t instr_group_1_81_xor(struct emu_cpu *c, struct instruction *i) 
    289289{ 
    290  
    291         /* 81 /6 iw  
    292          * r/m16 XOR imm16 
    293          * XOR r/m16,imm16 
    294          */ 
    295  
    296         /* 81 /6 id  
    297          * r/m32 XOR imm32 
    298          * XOR r/m32,imm32 
    299          */ 
    300  
     290        if ( i->prefixes & PREFIX_OPSIZE ) 
     291        { 
     292                /* 81 /6 iw  
     293                 * r/m16 XOR imm16 
     294                 * XOR r/m16,imm16 
     295                 */ 
     296                INSTR_CALC_AND_SET_FLAGS(16,  
     297                                                                 c,  
     298                                                                 *i->imm16,  
     299                                                                 *c->reg16[i->modrm.opc],  
     300                                                                 *c->reg16[i->modrm.opc],  
     301                                                                 ^) 
     302 
     303        } else 
     304        { 
     305                /* 81 /6 id  
     306                 * r/m32 XOR imm32 
     307                 * XOR r/m32,imm32 
     308                 */ 
     309                INSTR_CALC_AND_SET_FLAGS(32,  
     310                                                                 c,  
     311                                                                 i->imm,  
     312                                                                 c->reg[i->modrm.opc],  
     313                                                                 c->reg[i->modrm.opc],  
     314                                                                 ^) 
     315 
     316        } 
    301317        return 0; 
    302318} 
     
    305321{ 
    306322 
    307         /* 83 /6 ib  
    308          * r/m16 XOR imm8 (sign-extended) 
    309          * XOR r/m16,imm8   
    310          */ 
    311  
    312         /* 83 /6 ib  
    313          * r/m32 XOR imm8 (sign-extended) 
    314          * XOR r/m32,imm8   
    315          */ 
    316  
    317         return 0; 
    318 
     323        if ( i->prefixes & PREFIX_OPSIZE ) 
     324        { 
     325                /* 83 /6 ib  
     326                 * r/m16 XOR imm8 (sign-extended) 
     327                 * XOR r/m16,imm8   
     328                 */ 
     329                int16_t sexd = i->disp; 
     330                INSTR_CALC_AND_SET_FLAGS(16,  
     331                                                                 c,  
     332                                                                 sexd,  
     333                                                                 *c->reg16[i->modrm.opc],  
     334                                                                 *c->reg16[i->modrm.opc],  
     335                                                                 ^) 
     336 
     337        } else 
     338        { 
     339 
     340                /* 83 /6 ib  
     341                 * r/m32 XOR imm8 (sign-extended) 
     342                 * XOR r/m32,imm8   
     343                 */ 
     344                int32_t sexd = i->disp; 
     345                INSTR_CALC_AND_SET_FLAGS(32,  
     346                                                                 c,  
     347                                                                 sexd,  
     348                                                                 c->reg[i->modrm.opc],  
     349                                                                 c->reg[i->modrm.opc],  
     350                                                                 ^) 
     351 
     352        } 
     353        return 0; 
     354
     355