| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 # Copyright (c) 2012 The Native Client Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import sys | 6 import sys |
| 7 import unittest | 7 import unittest |
| 8 | 8 |
| 9 import gen_dfa | 9 import gen_dfa |
| 10 | 10 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 printer.GetContent().split(), | 179 printer.GetContent().split(), |
| 180 """ | 180 """ |
| 181 0xeb | 181 0xeb |
| 182 @instruction_jmp | 182 @instruction_jmp |
| 183 @operands_count_is_1 | 183 @operands_count_is_1 |
| 184 @operand0_8bit | 184 @operand0_8bit |
| 185 rel8 | 185 rel8 |
| 186 @operand0_jmp_to | 186 @operand0_jmp_to |
| 187 """.split()) | 187 """.split()) |
| 188 | 188 |
| 189 def test_no_modrm_with_rex(self): |
| 190 printer = gen_dfa.InstructionPrinter(gen_dfa.DECODER, 64) |
| 191 instr = gen_dfa.Instruction.Parse( |
| 192 'movabs Od !ad, 0xa0, amd64 nacl-forbidden') |
| 193 |
| 194 printer.PrintInstructionWithoutModRM(instr) |
| 195 |
| 196 self.assertEquals( |
| 197 printer.GetContent().split(), |
| 198 """ |
| 199 REX_RXB? |
| 200 0xa0 |
| 201 @instruction_movabs |
| 202 @operands_count_is_2 |
| 203 @operand0_32bit |
| 204 @operand1_32bit |
| 205 @set_spurious_rex_b |
| 206 @set_spurious_rex_x |
| 207 @set_spurious_rex_r |
| 208 @operand1_rax |
| 209 @operand0_absolute_disp |
| 210 disp64 |
| 211 """.split()) |
| 212 |
| 213 def test_nop_with_rex(self): |
| 214 printer = gen_dfa.InstructionPrinter(gen_dfa.DECODER, 64) |
| 215 instr = gen_dfa.Instruction.Parse( |
| 216 'nop, 0x40 0x90, amd64 norex') |
| 217 |
| 218 printer.PrintInstructionWithoutModRM(instr) |
| 219 |
| 220 self.assertEquals( |
| 221 printer.GetContent().split(), |
| 222 """ |
| 223 0x40 0x90 |
| 224 @instruction_nop |
| 225 @operands_count_is_0 |
| 226 @set_spurious_rex_b |
| 227 @set_spurious_rex_x |
| 228 @set_spurious_rex_r |
| 229 """.split()) |
| 230 |
| 189 | 231 |
| 190 class TestParser(unittest.TestCase): | 232 class TestParser(unittest.TestCase): |
| 191 | 233 |
| 192 def test_instruction_definitions(self): | 234 def test_instruction_definitions(self): |
| 193 def_filenames = sys.argv[1:] | 235 def_filenames = sys.argv[1:] |
| 194 assert len(def_filenames) > 0 | 236 assert len(def_filenames) > 0 |
| 195 for filename in def_filenames: | 237 for filename in def_filenames: |
| 196 gen_dfa.ParseDefFile(filename) | 238 gen_dfa.ParseDefFile(filename) |
| 197 | 239 |
| 198 | 240 |
| 199 if __name__ == '__main__': | 241 if __name__ == '__main__': |
| 200 unittest.main(argv=[sys.argv[0], '--verbose']) | 242 unittest.main(argv=[sys.argv[0], '--verbose']) |
| OLD | NEW |