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 = \
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@
--- /dev/null
+
+#include <stdio.h>
+
+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;
+}