# HG changeset patch # User Michael Pavone # Date 1429157684 25200 # Node ID 0b4d4f06bf91610da579bde0613cea85f100a882 # Parent a6cdcc1b1c02126c961679161aa4c8be5c715ef5 Add support for setcc in x86 module. Add support for translating il skipIf:else and il bool instructions in x86 module. diff -r a6cdcc1b1c02 -r 0b4d4f06bf91 modules/x86.tp --- a/modules/x86.tp Wed Apr 15 20:08:38 2015 -0700 +++ b/modules/x86.tp Wed Apr 15 21:14:44 2015 -0700 @@ -580,6 +580,13 @@ inst: 0xFFu8 | (mod_rm: (opex: 2u8) callDest) } } + + setcc <- :cond dst { + src <- opex: 0u8 + base <- 0x0Fu8 | (0x90u8 or (cond cc)) | (mod_rm: (opex: 0u8) dst) + + inst: (prefix: fakesrc dst b withInstruction: base) + } push <- :src { if: (src isInteger?) { @@ -812,7 +819,20 @@ outarr append: endlab } //skipIf:else - { } + { + endlab <- label: + elselab <- label: + outarr append: (jcc: (mapcond: (inst cond)) elselab) + foreach: (inst toskip) :_ inst { + convertIL: inst to: outarr withLabels: labels withSaved: saved + } + outarr append: (jmp: endlab) + outarr append: elselab + foreach: (inst else) :_ inst { + convertIL: inst to: outarr withLabels: labels withSaved: saved + } + outarr append: endlab + } { //save newsave <- [] @@ -830,7 +850,9 @@ } } //bool - { } + { + outarr append: (setcc: (mapcond: (inst cond)) (inst out)) + } ] print: "Opcode: " . (inst opcode) . "\n" fun <- opmap get: (inst opcode)