From: Julian Seward Date: Sat, 7 Apr 2007 12:15:44 +0000 (+0000) Subject: Test sahf/lahf on amd64. X-Git-Tag: svn/VALGRIND_3_3_0~290 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09c2f81371dcefc08a5d9243c67c8faa579ee4da;p=thirdparty%2Fvalgrind.git Test sahf/lahf on amd64. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6695 --- diff --git a/none/tests/amd64/Makefile.am b/none/tests/amd64/Makefile.am index 7a165b86bc..0491e9ff5d 100644 --- a/none/tests/amd64/Makefile.am +++ b/none/tests/amd64/Makefile.am @@ -30,7 +30,9 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ nibz_bennee_mmap.vgtest \ rcl-amd64.vgtest rcl-amd64.stdout.exp rcl-amd64.stderr.exp \ smc1.stderr.exp smc1.stdout.exp smc1.vgtest \ - shrld.stderr.exp shrld.stdout.exp shrld.vgtest + shrld.stderr.exp shrld.stdout.exp shrld.vgtest \ + slahf-amd64.stderr.exp slahf-amd64.stdout.exp \ + slahf-amd64.stderr.vgtest check_PROGRAMS = \ @@ -38,7 +40,8 @@ check_PROGRAMS = \ clc \ faultstatus fcmovnu fxtract $(INSN_TESTS) looper jrcxz \ rcl-amd64 smc1 shrld \ - nibz_bennee_mmap + nibz_bennee_mmap \ + slahf-amd64 AM_CFLAGS = $(WERROR) -Winline -Wall -Wshadow -g -I$(top_srcdir)/include @FLAG_M64@ diff --git a/none/tests/amd64/slahf-amd64.c b/none/tests/amd64/slahf-amd64.c new file mode 100644 index 0000000000..06a91ae8f0 --- /dev/null +++ b/none/tests/amd64/slahf-amd64.c @@ -0,0 +1,50 @@ + +#include + +typedef unsigned long long int ULong; + +extern ULong lahf_1 ( void ); +asm("\n" +"lahf_1:\n" +"\tpushq $0\n" +"\tpopfq\n" +"\tmovabsq $0xFFFFFFFFFFFFFFFF, %rax\n" +"\tmovabsq $0x8765432112345678, %rdx\n" +"\tsubq %rax, %rdx\n" +"\tlahf\n" +"\tret\n" +); + +extern ULong lahf_0 ( void ); +asm("\n" +"lahf_0:\n" +"\tpushq $0\n" +"\tpopfq\n" +"\tmovabsq $0x0, %rax\n" +"\tmovabsq $0x8765432112345678, %rdx\n" +"\tsubq %rax, %rdx\n" +"\tlahf\n" +"\tret\n" +); + +extern ULong sahf_then_lahf ( ULong ); +asm("\n" +"sahf_then_lahf:\n" +"\tmovq %rdi, %rax\n" +"\tsahf\n" +"\tmovabsq $0, %rax\n" +"\tlahf\n" +"\tret\n" +); + +int main ( void ) +{ + ULong i; + printf("0x%llx\n", lahf_0()); + printf("0x%llx\n", lahf_1()); + for (i = 0; i < 255; i++) { + ULong x = sahf_then_lahf(i << 8); + printf("%llx -> %llx\n", i, x); + } + return 0; +} diff --git a/none/tests/amd64/slahf-amd64.stderr.exp b/none/tests/amd64/slahf-amd64.stderr.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/none/tests/amd64/slahf-amd64.stdout.exp b/none/tests/amd64/slahf-amd64.stdout.exp new file mode 100644 index 0000000000..71657da0a6 --- /dev/null +++ b/none/tests/amd64/slahf-amd64.stdout.exp @@ -0,0 +1,257 @@ +0x8600 +0xffffffffffff93ff +0 -> 200 +1 -> 300 +2 -> 200 +3 -> 300 +4 -> 600 +5 -> 700 +6 -> 600 +7 -> 700 +8 -> 200 +9 -> 300 +a -> 200 +b -> 300 +c -> 600 +d -> 700 +e -> 600 +f -> 700 +10 -> 1200 +11 -> 1300 +12 -> 1200 +13 -> 1300 +14 -> 1600 +15 -> 1700 +16 -> 1600 +17 -> 1700 +18 -> 1200 +19 -> 1300 +1a -> 1200 +1b -> 1300 +1c -> 1600 +1d -> 1700 +1e -> 1600 +1f -> 1700 +20 -> 200 +21 -> 300 +22 -> 200 +23 -> 300 +24 -> 600 +25 -> 700 +26 -> 600 +27 -> 700 +28 -> 200 +29 -> 300 +2a -> 200 +2b -> 300 +2c -> 600 +2d -> 700 +2e -> 600 +2f -> 700 +30 -> 1200 +31 -> 1300 +32 -> 1200 +33 -> 1300 +34 -> 1600 +35 -> 1700 +36 -> 1600 +37 -> 1700 +38 -> 1200 +39 -> 1300 +3a -> 1200 +3b -> 1300 +3c -> 1600 +3d -> 1700 +3e -> 1600 +3f -> 1700 +40 -> 4200 +41 -> 4300 +42 -> 4200 +43 -> 4300 +44 -> 4600 +45 -> 4700 +46 -> 4600 +47 -> 4700 +48 -> 4200 +49 -> 4300 +4a -> 4200 +4b -> 4300 +4c -> 4600 +4d -> 4700 +4e -> 4600 +4f -> 4700 +50 -> 5200 +51 -> 5300 +52 -> 5200 +53 -> 5300 +54 -> 5600 +55 -> 5700 +56 -> 5600 +57 -> 5700 +58 -> 5200 +59 -> 5300 +5a -> 5200 +5b -> 5300 +5c -> 5600 +5d -> 5700 +5e -> 5600 +5f -> 5700 +60 -> 4200 +61 -> 4300 +62 -> 4200 +63 -> 4300 +64 -> 4600 +65 -> 4700 +66 -> 4600 +67 -> 4700 +68 -> 4200 +69 -> 4300 +6a -> 4200 +6b -> 4300 +6c -> 4600 +6d -> 4700 +6e -> 4600 +6f -> 4700 +70 -> 5200 +71 -> 5300 +72 -> 5200 +73 -> 5300 +74 -> 5600 +75 -> 5700 +76 -> 5600 +77 -> 5700 +78 -> 5200 +79 -> 5300 +7a -> 5200 +7b -> 5300 +7c -> 5600 +7d -> 5700 +7e -> 5600 +7f -> 5700 +80 -> 8200 +81 -> 8300 +82 -> 8200 +83 -> 8300 +84 -> 8600 +85 -> 8700 +86 -> 8600 +87 -> 8700 +88 -> 8200 +89 -> 8300 +8a -> 8200 +8b -> 8300 +8c -> 8600 +8d -> 8700 +8e -> 8600 +8f -> 8700 +90 -> 9200 +91 -> 9300 +92 -> 9200 +93 -> 9300 +94 -> 9600 +95 -> 9700 +96 -> 9600 +97 -> 9700 +98 -> 9200 +99 -> 9300 +9a -> 9200 +9b -> 9300 +9c -> 9600 +9d -> 9700 +9e -> 9600 +9f -> 9700 +a0 -> 8200 +a1 -> 8300 +a2 -> 8200 +a3 -> 8300 +a4 -> 8600 +a5 -> 8700 +a6 -> 8600 +a7 -> 8700 +a8 -> 8200 +a9 -> 8300 +aa -> 8200 +ab -> 8300 +ac -> 8600 +ad -> 8700 +ae -> 8600 +af -> 8700 +b0 -> 9200 +b1 -> 9300 +b2 -> 9200 +b3 -> 9300 +b4 -> 9600 +b5 -> 9700 +b6 -> 9600 +b7 -> 9700 +b8 -> 9200 +b9 -> 9300 +ba -> 9200 +bb -> 9300 +bc -> 9600 +bd -> 9700 +be -> 9600 +bf -> 9700 +c0 -> c200 +c1 -> c300 +c2 -> c200 +c3 -> c300 +c4 -> c600 +c5 -> c700 +c6 -> c600 +c7 -> c700 +c8 -> c200 +c9 -> c300 +ca -> c200 +cb -> c300 +cc -> c600 +cd -> c700 +ce -> c600 +cf -> c700 +d0 -> d200 +d1 -> d300 +d2 -> d200 +d3 -> d300 +d4 -> d600 +d5 -> d700 +d6 -> d600 +d7 -> d700 +d8 -> d200 +d9 -> d300 +da -> d200 +db -> d300 +dc -> d600 +dd -> d700 +de -> d600 +df -> d700 +e0 -> c200 +e1 -> c300 +e2 -> c200 +e3 -> c300 +e4 -> c600 +e5 -> c700 +e6 -> c600 +e7 -> c700 +e8 -> c200 +e9 -> c300 +ea -> c200 +eb -> c300 +ec -> c600 +ed -> c700 +ee -> c600 +ef -> c700 +f0 -> d200 +f1 -> d300 +f2 -> d200 +f3 -> d300 +f4 -> d600 +f5 -> d700 +f6 -> d600 +f7 -> d700 +f8 -> d200 +f9 -> d300 +fa -> d200 +fb -> d300 +fc -> d600 +fd -> d700 +fe -> d600 diff --git a/none/tests/amd64/slahf-amd64.vgtest b/none/tests/amd64/slahf-amd64.vgtest new file mode 100644 index 0000000000..759afd0c38 --- /dev/null +++ b/none/tests/amd64/slahf-amd64.vgtest @@ -0,0 +1,2 @@ +prog: slahf-amd64 +vgopts: -q