mc_translate.c: enable further uses of DLexpensive for scalar EQ/NE comparisons
[valgrind.git] / none / tests / amd64 / slahf-amd64.c
blob361b6791bb43b3611d53fbb9fa0ff19cf17a8509
2 #include <stdio.h>
4 typedef unsigned long long int ULong;
6 extern ULong lahf_1 ( void );
7 asm("\n"
8 ".text\n"
9 "lahf_1:\n"
10 "\tpushq $0\n"
11 "\tpopfq\n"
12 "\tmovabsq $0xFFFFFFFFFFFFFFFF, %rax\n"
13 "\tmovabsq $0x8765432112345678, %rdx\n"
14 "\tsubq %rax, %rdx\n"
15 "\t.byte 0x9F\n" /* lahf */
16 "\tret\n"
17 ".previous\n"
20 extern ULong lahf_0 ( void );
21 asm("\n"
22 ".text\n"
23 "lahf_0:\n"
24 "\tpushq $0\n"
25 "\tpopfq\n"
26 "\tmovabsq $0x0, %rax\n"
27 "\tmovabsq $0x8765432112345678, %rdx\n"
28 "\tsubq %rax, %rdx\n"
29 "\t.byte 0x9F\n" /* lahf */
30 "\tret\n"
31 ".previous\n"
34 extern ULong sahf_then_lahf ( ULong );
35 asm("\n"
36 ".text\n"
37 "sahf_then_lahf:\n"
38 "\tmovq %rdi, %rax\n"
39 "\t.byte 0x9E\n" /* sahf */
40 "\tmovabsq $0, %rax\n"
41 "\t.byte 0x9F\n" /* lahf */
42 "\tret\n"
43 ".previous\n"
46 int main ( void )
48 ULong i;
49 printf("0x%llx\n", lahf_0());
50 printf("0x%llx\n", lahf_1());
51 for (i = 0; i < 255; i++) {
52 ULong x = sahf_then_lahf(i << 8);
53 printf("%llx -> %llx\n", i, x);
55 return 0;