about summary refs log tree commit diff stats
path: root/test/arch/x86/unit/mn_pcmpeq.py
blob: b8eeafba3956c4b7a6c3adcdc76a44cfc7ae21bb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#! /usr/bin/env python2

import sys

from asm_test import Asm_Test_32


class Test_PCMPEQB(Asm_Test_32):
    TXT = '''
    main:
       CALL    next
       .byte 0x88, 0x78, 0x66, 0x56, 0x44, 0x3F, 0xFF, 0x11
       .byte 0x89, 0x77, 0x66, 0x55, 0xF9, 0x33, 0x22, 0x11
    next:
       POP     EBP
       MOVQ    MM0, QWORD PTR [EBP]
       MOVQ    MM1, MM0
       PCMPEQB MM1, QWORD PTR [EBP+0x8]
       RET
    '''

    def check(self):
        assert self.myjit.cpu.MM0 == 0x11FF3F4456667888
        assert self.myjit.cpu.MM1 == 0xFF00000000FF0000


class Test_PCMPEQW(Asm_Test_32):
    TXT = '''
    main:
       CALL    next
       .byte 0x88, 0x77, 0x66, 0x55, 0x44, 0x3F, 0x22, 0x11
       .byte 0x89, 0x77, 0x66, 0x55, 0xF9, 0x33, 0x22, 0x11
    next:
       POP     EBP
       MOVQ    MM0, QWORD PTR [EBP]
       MOVQ    MM1, MM0
       PCMPEQW MM1, QWORD PTR [EBP+0x8]
       RET
    '''

    def check(self):
        assert self.myjit.cpu.MM0 == 0x11223F4455667788
        assert self.myjit.cpu.MM1 == 0xFFFF0000FFFF0000


class Test_PCMPEQD(Asm_Test_32):
    TXT = '''
    main:
       CALL    next
       .byte 0x88, 0x77, 0x66, 0x55, 0x44, 0x3F, 0x22, 0x11
       .byte 0x88, 0x77, 0x66, 0x55, 0xF9, 0x33, 0x22, 0x11
    next:
       POP     EBP
       MOVQ    MM0, QWORD PTR [EBP]
       MOVQ    MM1, MM0
       PCMPEQD MM1, QWORD PTR [EBP+0x8]
       RET
    '''

    def check(self):
        assert self.myjit.cpu.MM0 == 0x11223F4455667788
        assert self.myjit.cpu.MM1 == 0x00000000FFFFFFFF


class Test_PCMPEQQ(Asm_Test_32):
    TXT = '''
    main:
       MOVD       XMM0, ESI
       MOVD       XMM1, EDI
       PCMPEQQ    XMM0, XMM1
       JZ         ret
       MOV        EAX, 1
    ret:
       RET
    '''

    def prepare(self):
        val = 1
        self.myjit.cpu.ESI = 0x11223344
        self.myjit.cpu.EDI = 0x11223345
        self.myjit.cpu.XMM0 = val

    def check(self):
        assert self.myjit.cpu.XMM0 == 0xffffffffffffffff0000000000000000
        assert self.myjit.cpu.XMM1 == 0x11223345


if __name__ == "__main__":
    [test(*sys.argv[1:])() for test in [
        Test_PCMPEQB,
        Test_PCMPEQW,
        Test_PCMPEQD,
        Test_PCMPEQQ,
    ]]