summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJinkun Jang <jinkun.jang@samsung.com>2013-03-12 15:14:36 +0900
committerJinkun Jang <jinkun.jang@samsung.com>2013-03-12 15:14:36 +0900
commit993d65531741fccf26fc10fc5789a5c9fca8c5ae (patch)
tree996be9095a97ff2aac0d98963b6044d47a0ec60c /test
parent65c26d26fb72cec0d43d199c72ed27513d17f4c9 (diff)
downloadnasm-993d65531741fccf26fc10fc5789a5c9fca8c5ae.tar.gz
nasm-993d65531741fccf26fc10fc5789a5c9fca8c5ae.tar.bz2
nasm-993d65531741fccf26fc10fc5789a5c9fca8c5ae.zip
Diffstat (limited to 'test')
-rw-r--r--test/Makefile91
-rw-r--r--test/_file_.asm5
-rw-r--r--test/_version.asm2
-rw-r--r--test/a32offs.asm9
-rw-r--r--test/absolute.asm40
-rw-r--r--test/addr64x.asm18
-rw-r--r--test/align13.asm16
-rw-r--r--test/align13s.asm16
-rw-r--r--test/alonesym-obj.asm163
-rw-r--r--test/andbyte.asm15
-rw-r--r--test/aoutso.asm99
-rw-r--r--test/aouttest.asm86
-rw-r--r--test/aouttest.c36
-rw-r--r--test/avx.asm53
-rw-r--r--test/avx005.asm529
-rw-r--r--test/bcd.asm21
-rw-r--r--test/binexe.asm35
-rw-r--r--test/bintest.asm59
-rwxr-xr-xtest/bisect.sh22
-rw-r--r--test/br1879590.asm25
-rw-r--r--test/br2003451.asm15
-rw-r--r--test/br2030823.asm5
-rw-r--r--test/br2148476.asm221
-rw-r--r--test/br2222615.asm19
-rw-r--r--test/br560575.asm17
-rw-r--r--test/br560873.asm27
-rw-r--r--test/br890790.asm7
-rw-r--r--test/br890790_i.asm1
-rw-r--r--test/changed.asm383
-rw-r--r--test/cofftest.asm85
-rw-r--r--test/cofftest.c35
-rw-r--r--test/crc32.asm37
-rw-r--r--test/dtbcd.asm72
-rw-r--r--test/elf64so.asm118
-rw-r--r--test/elfso.asm100
-rw-r--r--test/elftest.asm87
-rw-r--r--test/elftest.c38
-rw-r--r--test/elftest64.c43
-rw-r--r--test/elif.asm39
-rw-r--r--test/expimp.asm90
-rw-r--r--test/far64.asm10
-rw-r--r--test/float.asm186
-rw-r--r--test/float8.asm135
-rw-r--r--test/floatb.asm35
-rw-r--r--test/floatexp.asm382
-rw-r--r--test/floatize.asm19
-rw-r--r--test/floattest.asm28
-rw-r--r--test/floatx.asm525
-rw-r--r--test/fpu.asm127
-rw-r--r--test/fwdopt.asm133
-rw-r--r--test/fwdoptpp.asm150
-rw-r--r--test/gotoff64.asm25
-rw-r--r--test/ifelse.asm46
-rw-r--r--test/ifmacro.asm413
-rw-r--r--test/iftoken.asm317
-rwxr-xr-xtest/iftoken.pl32
-rw-r--r--test/imacro.asm8
-rw-r--r--test/imm64.asm7
-rw-r--r--test/immwarn.asm91
-rw-r--r--test/imul.asm117
-rw-r--r--test/inc1.asm6
-rw-r--r--test/inc2.asm8
-rw-r--r--test/inctest.asm15
-rw-r--r--test/insnlbl.asm12
-rw-r--r--test/invlpga.asm11
-rw-r--r--test/jmp64.asm15
-rw-r--r--test/lar_lsl.asm124
-rw-r--r--test/larlsl.asm23
-rw-r--r--test/lnxhello.asm54
-rw-r--r--test/local.asm19
-rw-r--r--test/loopoffs.asm12
-rw-r--r--test/macro-defaults.asm64
-rw-r--r--test/mmxsize.asm38
-rw-r--r--test/movimm.asm28
-rw-r--r--test/movnti.asm10
-rw-r--r--test/multisection.asm96
-rw-r--r--test/nasmformat.asm17
-rwxr-xr-xtest/new9
-rw-r--r--test/nop.asm17
-rw-r--r--test/nullfile.asm4
-rw-r--r--test/objexe.asm30
-rw-r--r--test/objlink.c33
-rw-r--r--test/objtest.asm85
-rw-r--r--test/optimization.asm104
-rw-r--r--test/org.asm18
-rwxr-xr-xtest/perf/label.pl18
-rwxr-xr-xtest/perf/macro.pl18
-rwxr-xr-xtest/perf/token.pl23
-rwxr-xr-xtest/performtest.pl192
-rw-r--r--test/pinsr16.asm53
-rw-r--r--test/pinsr32.asm53
-rw-r--r--test/pinsr64.asm68
-rw-r--r--test/popcnt.asm32
-rw-r--r--test/ppindirect.asm42
-rw-r--r--test/pushseg.asm17
-rw-r--r--test/r13.asm15
-rw-r--r--test/radix.asm54
-rw-r--r--test/riprel.asm5357
-rwxr-xr-xtest/riprel.pl29
-rw-r--r--test/riprel2.asm11
-rw-r--r--test/smartalign16.asm36
-rw-r--r--test/smartalign32.asm36
-rw-r--r--test/smartalign64.asm36
-rw-r--r--test/struc.asm33
-rw-r--r--test/test67.asm38
-rw-r--r--test/testdos.asm13
-rw-r--r--test/testnos3.asm973
-rw-r--r--test/time.asm11
-rw-r--r--test/tmap.nas1447
-rw-r--r--test/uscore.asm15
-rw-r--r--test/utf.asm30
-rw-r--r--test/vmread.asm26
-rw-r--r--test/weirdpaste.asm29
-rw-r--r--test/xchg.asm96
-rw-r--r--test/xcrypt.asm24
-rw-r--r--test/zerobyte.asm22
116 files changed, 15264 insertions, 0 deletions
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 0000000..8b51359
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,91 @@
+.SUFFIXES: .bin .o .o64 .obj .obj64 .exe .asm .lst .pl
+
+NASM = ../nasm
+NASMOPT = -Ox -I../misc $(OPT)
+PERL = perl
+TESTS = $(wildcard *.asm)
+
+%.bin: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f bin -o $@ -l $*.lst $<
+
+%.ith: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f ith -o $@ -l $*.lst $<
+
+%.srec: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f srec -o $@ -l $*.lst $<
+
+%.o: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f elf32 -o $@ -l $*.lst $<
+
+%.o64: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f elf64 -o $@ -l $*.lst $<
+
+%.obj: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f obj -o $@ -l $*.lst $<
+
+%.coff: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f coff -o $@ -l $*.lst $<
+
+%.win32: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f win32 -o $@ -l $*.lst $<
+
+%.win64: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f win64 -o $@ -l $*.lst $<
+
+%.mo32: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f macho32 -o $@ -l $*.lst $<
+
+%.mo64: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f macho64 -o $@ -l $*.lst $<
+
+%.dbg: %.asm $(NASM)
+ $(NASM) $(NASMOPT) -f dbg -o $@ -l $*.lst $<
+
+%.asm: %.pl
+ $(PERL) $< > $@
+
+all:
+
+golden: performtest.pl $(TESTS)
+ $(PERL) performtest.pl --golden --nasm='$(NASM)' $(TESTS)
+
+test: performtest.pl $(NASM) $(TESTS)
+ $(PERL) performtest.pl --nasm='$(NASM)' $(TESTS)
+
+diff: performtest.pl $(NASM) $(TESTS)
+ $(PERL) performtest.pl --diff --nasm='$(NASM)' $(TESTS)
+
+clean:
+ rm -f *.com *.o *.o64 *.obj *.win32 *.win64 *.exe *.lst *.bin
+ rm -f *.dbg *.coff *.ith *.srec *.mo32 *.mo64
+ rm -rf testresults
+ rm -f elftest elftest64
+
+spotless: clean
+ rm -rf golden
+
+#
+# Test for ELF32 shared libraries; assumes an x86 Linux system
+#
+elfso.o: elfso.asm $(NASM)
+ $(NASM) $(NASMOPT) -f elf32 -F stabs -o $@ -l $*.lst $<
+
+elfso.so: elfso.o
+ $(LD) -m elf_i386 -shared -o $@ $<
+
+elftest: elftest.c elfso.so
+ $(CC) -g -m32 -o $@ $^
+ -env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH ./elftest
+
+#
+# Test for ELF64 shared libraries; assumes an x86-64 Linux system
+#
+elf64so.o: elf64so.asm $(NASM)
+ $(NASM) $(NASMOPT) -f elf64 -F dwarf -o $@ -l $*.lst $<
+
+elf64so.so: elf64so.o
+ $(LD) -shared -o $@ $<
+
+elftest64: elftest64.c elf64so.so
+ $(CC) -g -o $@ $^
+ -env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH ./elftest64
diff --git a/test/_file_.asm b/test/_file_.asm
new file mode 100644
index 0000000..f633feb
--- /dev/null
+++ b/test/_file_.asm
@@ -0,0 +1,5 @@
+;Testname=bin; Arguments=-fbin -o_file_.bin; Files=stdout stderr _file_.bin
+ db __FILE__, `\r\n`
+ db __FILE__, `\r\n`
+ dw __LINE__
+ dw __LINE__
diff --git a/test/_version.asm b/test/_version.asm
new file mode 100644
index 0000000..d20a74d
--- /dev/null
+++ b/test/_version.asm
@@ -0,0 +1,2 @@
+;Testname=version; Arguments=-v; Files=stdout
+;Dummy test to record version numbers
diff --git a/test/a32offs.asm b/test/a32offs.asm
new file mode 100644
index 0000000..4d17e0e
--- /dev/null
+++ b/test/a32offs.asm
@@ -0,0 +1,9 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -oa32offs.bin; Files=a32offs.bin stdout stderr
+;Testname=optimized; Arguments=-Ox -fbin -oa32offs.bin; Files=a32offs.bin stdout stderr
+ bits 16
+foo: a32 loop foo
+bar: loop bar, ecx
+
+ bits 32
+baz: a16 loop baz
+qux: loop qux, cx
diff --git a/test/absolute.asm b/test/absolute.asm
new file mode 100644
index 0000000..31c8178
--- /dev/null
+++ b/test/absolute.asm
@@ -0,0 +1,40 @@
+;Testname=bin; Arguments=-fbin -oabsolute.bin; Files=stdout stderr absolute.bin
+ org 7c00h
+init_foo:
+ jmp init_bar
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+
+init_bar:
+ mov [b1],dl
+ mov [b2],edx
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ ret
+
+ absolute init_bar+7
+b1: resb 1
+b2: resd 6
+
diff --git a/test/addr64x.asm b/test/addr64x.asm
new file mode 100644
index 0000000..c7a64f5
--- /dev/null
+++ b/test/addr64x.asm
@@ -0,0 +1,18 @@
+;Testname=O0; Arguments=-O0 -fbin -oaddr64.bin; Files=stdout stderr addr64.bin
+;Testname=O1; Arguments=-O1 -fbin -oaddr64.bin; Files=stdout stderr addr64.bin
+;Testname=Ox; Arguments=-Ox -fbin -oaddr64.bin; Files=stdout stderr addr64.bin
+ bits 64
+ mov rdx,[rax]
+ mov eax,[byte rsp+0x01]
+ mov eax,[byte rsp-0x01]
+ mov eax,[byte rsp+0xFF]
+ mov eax,[byte rsp-0xFF]
+ mov eax,[rsp+0x08]
+ mov eax,[rsp-0x01]
+ mov eax,[rsp+0xFF]
+ mov eax,[rsp-0xFF]
+ mov rax,[rsp+56]
+ mov [rsi],dl
+ mov byte [rsi],'-'
+ mov [rsi],al
+ mov byte [rsi],' '
diff --git a/test/align13.asm b/test/align13.asm
new file mode 100644
index 0000000..556373f
--- /dev/null
+++ b/test/align13.asm
@@ -0,0 +1,16 @@
+; Test of non-power-of-2 alignment
+
+ bits 32
+
+ inc eax
+ inc eax
+ align 13
+ inc eax
+ inc eax
+ align 13
+ inc eax
+ inc eax
+ align 13
+ align 13 ;should do nothing
+ inc eax
+ inc eax
diff --git a/test/align13s.asm b/test/align13s.asm
new file mode 100644
index 0000000..dab21a2
--- /dev/null
+++ b/test/align13s.asm
@@ -0,0 +1,16 @@
+; Test of non-power-of-2 alignment
+%use smartalign
+
+ bits 32
+
+ inc eax
+ inc eax
+ align 13
+ inc eax
+ inc eax
+ align 13
+ inc eax
+ inc eax
+ align 13
+ inc eax
+ inc eax
diff --git a/test/alonesym-obj.asm b/test/alonesym-obj.asm
new file mode 100644
index 0000000..6be4d5d
--- /dev/null
+++ b/test/alonesym-obj.asm
@@ -0,0 +1,163 @@
+section DOS32DATA align=16 public use32 FLAT class=DOS32DATA
+
+ global sym0000
+ global sym0001
+ global sym0002
+ global sym0003
+ global sym0004
+ global sym0005
+ global sym0006
+ global sym0007
+ global sym0008
+ global sym0009
+ global sym0010
+ global sym0011
+ global sym0012
+ global sym0013
+ global sym0014
+ global sym0015
+ global sym0016
+ global sym0017
+ global sym0018
+ global sym0019
+ global sym0020
+ global sym0021
+ global sym0022
+ global sym0023
+ global sym0024
+ global sym0025
+ global sym0026
+ global sym0027
+ global sym0028
+ global sym0029
+ global sym0030
+ global sym0031
+ global sym0032
+ global sym0033
+ global sym0034
+ global sym0035
+ global sym0036
+ global sym0037
+ global sym0038
+ global sym0039
+ global sym0040
+ global sym0041
+ global sym0042
+ global sym0043
+ global sym0044
+ global sym0045
+ global sym0046
+ global sym0047
+ global sym0048
+ global sym0049
+ global sym0050
+ global sym0051
+ global sym0052
+ global sym0053
+ global sym0054
+ global sym0055
+ global sym0056
+ global sym0057
+ global sym0058
+ global sym0059
+ global sym0060
+ global sym0061
+ global sym0062
+ global sym0063
+ global sym0064
+ global sym0065
+ global sym0066
+ global sym0067
+ global sym0068
+ global sym0069
+ global sym0070
+ global sym0071
+ global sym0072
+ global sym0073
+ global sym0074
+ global sym0075
+ global sym0076
+ global sym0077
+ global s
+
+
+ resb 20000h
+sym0000 resd 1
+sym0001 resd 1
+sym0002 resd 1
+sym0003 resd 1
+sym0004 resd 1
+sym0005 resd 1
+sym0006 resd 1
+sym0007 resd 1
+sym0008 resd 1
+sym0009 resd 1
+sym0010 resd 1
+sym0011 resd 1
+sym0012 resd 1
+sym0013 resd 1
+sym0014 resd 1
+sym0015 resd 1
+sym0016 resd 1
+sym0017 resd 1
+sym0018 resd 1
+sym0019 resd 1
+sym0020 resd 1
+sym0021 resd 1
+sym0022 resd 1
+sym0023 resd 1
+sym0024 resd 1
+sym0025 resd 1
+sym0026 resd 1
+sym0027 resd 1
+sym0028 resd 1
+sym0029 resd 1
+sym0030 resd 1
+sym0031 resd 1
+sym0032 resd 1
+sym0033 resd 1
+sym0034 resd 1
+sym0035 resd 1
+sym0036 resd 1
+sym0037 resd 1
+sym0038 resd 1
+sym0039 resd 1
+sym0040 resd 1
+sym0041 resd 1
+sym0042 resd 1
+sym0043 resd 1
+sym0044 resd 1
+sym0045 resd 1
+sym0046 resd 1
+sym0047 resd 1
+sym0048 resd 1
+sym0049 resd 1
+sym0050 resd 1
+sym0051 resd 1
+sym0052 resd 1
+sym0053 resd 1
+sym0054 resd 1
+sym0055 resd 1
+sym0056 resd 1
+sym0057 resd 1
+sym0058 resd 1
+sym0059 resd 1
+sym0060 resd 1
+sym0061 resd 1
+sym0062 resd 1
+sym0063 resd 1
+sym0064 resd 1
+sym0065 resd 1
+sym0066 resd 1
+sym0067 resd 1
+sym0068 resd 1
+sym0069 resd 1
+sym0070 resd 1
+sym0071 resd 1
+sym0072 resd 1
+sym0073 resd 1
+sym0074 resd 1
+sym0075 resd 1
+sym0076 resd 1
+sym0077 resd 1
+s resd 1
diff --git a/test/andbyte.asm b/test/andbyte.asm
new file mode 100644
index 0000000..3d3b1c1
--- /dev/null
+++ b/test/andbyte.asm
@@ -0,0 +1,15 @@
+;Testname=test; Arguments=-fbin -oandbyte.bin; Files=stdout stderr andbyte.bin
+;Testname=otest; Arguments=-Ox -fbin -oandbyte.bin; Files=stdout stderr andbyte.bin
+
+ bits 16
+
+ add sp, byte -0x10
+ add sp, -0x10
+ adc sp, byte -0x10
+ adc sp, -0x10
+ and sp, byte -0x10
+ and sp, -0x10
+ sbb sp, byte -0x10
+ sbb sp, -0x10
+ sub sp, byte -0x10
+ sub sp, -0x10
diff --git a/test/aoutso.asm b/test/aoutso.asm
new file mode 100644
index 0000000..aab35a5
--- /dev/null
+++ b/test/aoutso.asm
@@ -0,0 +1,99 @@
+;Testname=unoptimized; Arguments=-O0 -faoutb -oaoutso.o; Files=stdout stderr aoutso.o
+;Testname=optimized; Arguments=-Ox -faoutb -oaoutso.o; Files=stdout stderr aoutso.o
+
+; test source file for assembling to NetBSD/FreeBSD a.out shared library
+; build with:
+; nasm -f aoutb aoutso.asm
+; ld -Bshareable -o aoutso.so aoutso.o
+; test with:
+; cc -o aoutso aouttest.c aoutso.so
+; ./aoutso
+
+; This file should test the following:
+; [1] Define and export a global text-section symbol
+; [2] Define and export a global data-section symbol
+; [3] Define and export a global BSS-section symbol
+; [4] Define a non-global text-section symbol
+; [5] Define a non-global data-section symbol
+; [6] Define a non-global BSS-section symbol
+; [7] Define a COMMON symbol
+; [8] Define a NASM local label
+; [9] Reference a NASM local label
+; [10] Import an external symbol
+; [11] Make a PC-relative call to an external symbol
+; [12] Reference a text-section symbol in the text section
+; [13] Reference a data-section symbol in the text section
+; [14] Reference a BSS-section symbol in the text section
+; [15] Reference a text-section symbol in the data section
+; [16] Reference a data-section symbol in the data section
+; [17] Reference a BSS-section symbol in the data section
+
+ BITS 32
+ EXTERN __GLOBAL_OFFSET_TABLE_
+ GLOBAL _lrotate:function ; [1]
+ GLOBAL _greet:function ; [1]
+ GLOBAL _asmstr:data _asmstr.end-_asmstr ; [2]
+ GLOBAL _textptr:data 4 ; [2]
+ GLOBAL _selfptr:data 4 ; [2]
+ GLOBAL _integer:data 4 ; [3]
+ EXTERN _printf ; [10]
+ COMMON _commvar 4 ; [7]
+
+ SECTION .text
+
+; prototype: long lrotate(long x, int num);
+_lrotate: ; [1]
+ push ebp
+ mov ebp,esp
+ mov eax,[ebp+8]
+ mov ecx,[ebp+12]
+.label rol eax,1 ; [4] [8]
+ loop .label ; [9] [12]
+ mov esp,ebp
+ pop ebp
+ ret
+
+; prototype: void greet(void);
+_greet push ebx ; we'll use EBX for GOT, so save it
+ call .getgot
+.getgot: pop ebx
+ add ebx,__GLOBAL_OFFSET_TABLE_ + $$ - .getgot wrt ..gotpc
+ mov eax,[ebx+_integer wrt ..got] ; [14]
+ mov eax,[eax]
+ inc eax
+ mov [ebx+localint wrt ..gotoff],eax ; [14]
+ mov eax,[ebx+_commvar wrt ..got]
+ push dword [eax]
+ mov eax,[ebx+localptr wrt ..gotoff] ; [13]
+ push dword [eax]
+ mov eax,[ebx+_integer wrt ..got] ; [1] [14]
+ push dword [eax]
+ lea eax,[ebx+_printfstr wrt ..gotoff]
+ push eax ; [13]
+ call _printf wrt ..plt ; [11]
+ add esp,16
+ pop ebx
+ ret
+
+ SECTION .data
+
+; a string
+_asmstr db 'hello, world', 0 ; [2]
+.end
+
+; a string for Printf
+_printfstr db "integer==%d, localint==%d, commvar=%d"
+ db 10, 0
+
+; some pointers
+localptr dd localint ; [5] [17]
+_textptr dd _greet wrt ..sym ; [15]
+_selfptr dd _selfptr wrt ..sym ; [16]
+
+ SECTION .bss
+
+; an integer
+_integer resd 1 ; [3]
+
+; a local integer
+localint resd 1 ; [6]
diff --git a/test/aouttest.asm b/test/aouttest.asm
new file mode 100644
index 0000000..10d0e10
--- /dev/null
+++ b/test/aouttest.asm
@@ -0,0 +1,86 @@
+;Testname=unoptimized; Arguments=-O0 -faout -oaouttest.o; Files=stdout stderr aouttest.o
+;Testname=optimized; Arguments=-Ox -faout -oaouttest.o; Files=stdout stderr aouttest.o
+
+; test source file for assembling to a.out
+; build with:
+; nasm -f aout aouttest.asm
+; gcc -o aouttest aouttest.c aouttest.o
+; (assuming your gcc is a.out)
+
+; This file should test the following:
+; [1] Define and export a global text-section symbol
+; [2] Define and export a global data-section symbol
+; [3] Define and export a global BSS-section symbol
+; [4] Define a non-global text-section symbol
+; [5] Define a non-global data-section symbol
+; [6] Define a non-global BSS-section symbol
+; [7] Define a COMMON symbol
+; [8] Define a NASM local label
+; [9] Reference a NASM local label
+; [10] Import an external symbol
+; [11] Make a PC-relative call to an external symbol
+; [12] Reference a text-section symbol in the text section
+; [13] Reference a data-section symbol in the text section
+; [14] Reference a BSS-section symbol in the text section
+; [15] Reference a text-section symbol in the data section
+; [16] Reference a data-section symbol in the data section
+; [17] Reference a BSS-section symbol in the data section
+
+ BITS 32
+ GLOBAL _lrotate ; [1]
+ GLOBAL _greet ; [1]
+ GLOBAL _asmstr ; [2]
+ GLOBAL _textptr ; [2]
+ GLOBAL _selfptr ; [2]
+ GLOBAL _integer ; [3]
+ EXTERN _printf ; [10]
+ COMMON _commvar 4 ; [7]
+
+ SECTION .text
+
+; prototype: long lrotate(long x, int num);
+_lrotate: ; [1]
+ push ebp
+ mov ebp,esp
+ mov eax,[ebp+8]
+ mov ecx,[ebp+12]
+.label rol eax,1 ; [4] [8]
+ loop .label ; [9] [12]
+ mov esp,ebp
+ pop ebp
+ ret
+
+; prototype: void greet(void);
+_greet mov eax,[_integer] ; [14]
+ inc eax
+ mov [localint],eax ; [14]
+ push dword [_commvar]
+ mov eax,[localptr] ; [13]
+ push dword [eax]
+ push dword [_integer] ; [1] [14]
+ push dword _printfstr ; [13]
+ call _printf ; [11]
+ add esp,16
+ ret
+
+ SECTION .data
+
+; a string
+_asmstr db 'hello, world', 0 ; [2]
+
+; a string for Printf
+_printfstr db "integer==%d, localint==%d, commvar=%d"
+ db 10, 0
+
+; some pointers
+localptr dd localint ; [5] [17]
+_textptr dd _greet ; [15]
+_selfptr dd _selfptr ; [16]
+
+ SECTION .bss
+
+; an integer
+_integer resd 1 ; [3]
+
+; a local integer
+localint resd 1 ; [6]
diff --git a/test/aouttest.c b/test/aouttest.c
new file mode 100644
index 0000000..2514ce1
--- /dev/null
+++ b/test/aouttest.c
@@ -0,0 +1,36 @@
+/*
+ * test source file for assembling to a.out
+ * build with:
+ * nasm -f aout aouttest.asm
+ * gcc -o aouttest aouttest.c aouttest.o
+ * (assuming your gcc is a.out)
+ */
+
+#include <stdio.h>
+#include <inttypes.h>
+
+extern int lrotate(int32_t, int);
+extern void greet(void);
+extern int8_t asmstr[];
+extern void *selfptr;
+extern void *textptr;
+extern int integer, commvar;
+
+int main(void)
+{
+
+ printf("Testing lrotate: should get 0x00400000, 0x00000001\n");
+ printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000, 4));
+ printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000, 14));
+
+ printf("This string should read `hello, world': `%s'\n", asmstr);
+
+ printf("The integers here should be 1234, 1235 and 4321:\n");
+ integer = 1234;
+ commvar = 4321;
+ greet();
+
+ printf("These pointers should be equal: %p and %p\n", &greet, textptr);
+
+ printf("So should these: %p and %p\n", selfptr, &selfptr);
+}
diff --git a/test/avx.asm b/test/avx.asm
new file mode 100644
index 0000000..9e5e15b
--- /dev/null
+++ b/test/avx.asm
@@ -0,0 +1,53 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -oavx.bin; Files=stdout stderr avx.bin
+;Testname=optimized; Arguments=-Ox -fbin -oavx.bin; Files=stdout stderr avx.bin
+
+ bits 64
+ blendvpd xmm2,xmm1,xmm0
+
+ vblendvpd xmm2,xmm1,xmm0,xmm0
+ vblendvpd xmm2,xmm1,xmm0
+ vblendvpd ymm2,ymm1,ymm0,ymm0
+ vblendvpd ymm2,ymm1,ymm0
+
+ vcvtsi2sd xmm9,xmm10,ecx
+ vcvtsi2sd xmm9,xmm10,rcx
+ vcvtsi2sd xmm9,xmm10,dword [rdi]
+ vcvtsi2sd xmm9,xmm10,qword [rdi]
+
+ vpermil2ps xmm0,xmm1,[rdi],xmm3,0
+ vpermil2ps xmm0,xmm1,xmm2,[rdi],1
+ vpermil2ps ymm0,ymm1,ymm2,ymm3,2
+ vpermil2ps ymm0,ymm1,ymm2,[rdi],3
+ vpermil2ps ymm0,ymm1,[rdi],ymm3,2
+ vpermil2ps ymm0,ymm1,ymm2,[rdi],3
+
+ vpextrb [rax],xmm1,0x33
+ vpextrw [rax],xmm1,0x33
+ vpextrd [rax],xmm1,0x33
+ vpextrq [rax],xmm1,0x33
+ vpextrb rax,xmm1,0x33
+ vpextrw rax,xmm1,0x33
+ vpextrd rax,xmm1,0x33
+ vpextrq rax,xmm1,0x33
+ vpextrb eax,xmm1,0x33
+ vpextrw eax,xmm1,0x33
+ vpextrd eax,xmm1,0x33
+; vpextrq eax,xmm1,0x33
+
+ vcvtpd2ps xmm0,xmm1
+ vcvtpd2ps xmm0,oword [rsi]
+ vcvtpd2ps xmm0,ymm1
+ vcvtpd2ps xmm0,yword [rsi]
+; vcvtpd2ps xmm0,[rsi]
+
+ vcvtpd2dq xmm0,xmm1
+ vcvtpd2dq xmm0,oword [rsi]
+ vcvtpd2dq xmm0,ymm1
+ vcvtpd2dq xmm0,yword [rsi]
+; vcvtpd2dq xmm0,[rsi]
+
+ vcvttpd2dq xmm0,xmm1
+ vcvttpd2dq xmm0,oword [rsi]
+ vcvttpd2dq xmm0,ymm1
+ vcvttpd2dq xmm0,yword [rsi]
+; vcvttpd2dq xmm0,[rsi]
diff --git a/test/avx005.asm b/test/avx005.asm
new file mode 100644
index 0000000..0876514
--- /dev/null
+++ b/test/avx005.asm
@@ -0,0 +1,529 @@
+;Testname=avx005; Arguments=-fbin -oavx005.bin -Ox; Files=stdout stderr avx005.bin
+
+%define regxmm xmm0
+%define regymm ymm0
+%define mem [0]
+%define imm 3
+
+%macro x 1+.nolist
+ %1 ; comment this line if RELAXed variants are not supported
+%endmacro
+
+ VFMADDSUB132PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADDSUB132PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADDSUB132PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMADDSUB132PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMADDSUB312PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADDSUB312PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADDSUB312PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADDSUB312PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADDSUB132PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADDSUB132PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADDSUB132PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMADDSUB132PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMADDSUB312PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADDSUB312PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADDSUB312PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADDSUB312PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUBADD132PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUBADD132PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUBADD132PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUBADD132PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUBADD312PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUBADD312PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUBADD312PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUBADD312PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUBADD132PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUBADD132PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUBADD132PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUBADD132PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUBADD312PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUBADD312PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUBADD312PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUBADD312PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD132PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADD132PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADD132PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMADD132PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMADD312PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADD312PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADD312PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADD312PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD132PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADD132PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADD132PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMADD132PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMADD312PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADD312PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADD312PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADD312PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD132SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFMADD132SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMADD312SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFMADD312SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMADD132SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFMADD132SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMADD312SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFMADD312SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMSUB132PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUB132PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUB132PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUB132PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUB312PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUB312PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUB312PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUB312PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUB132PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUB132PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUB132PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUB132PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUB312PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUB312PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUB312PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUB312PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUB132SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFMSUB132SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMSUB312SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFMSUB312SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMSUB132SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFMSUB132SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMSUB312SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFMSUB312SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMADD132PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMADD132PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMADD132PS regymm,regymm,mem ; VEX_FMA,SY
+ VFNMADD132PS regymm,regymm,regymm ; VEX_FMA
+
+x VFNMADD312PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMADD312PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMADD312PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMADD312PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMADD132PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMADD132PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMADD132PD regymm,regymm,mem ; VEX_FMA,SY
+ VFNMADD132PD regymm,regymm,regymm ; VEX_FMA
+
+x VFNMADD312PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMADD312PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMADD312PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMADD312PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMADD132SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFNMADD132SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMADD312SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFNMADD312SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMADD132SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFNMADD132SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMADD312SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFNMADD312SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMSUB132PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMSUB132PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMSUB132PS regymm,regymm,mem ; VEX_FMA,SY
+ VFNMSUB132PS regymm,regymm,regymm ; VEX_FMA
+
+x VFNMSUB312PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMSUB312PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMSUB312PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMSUB312PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMSUB132PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMSUB132PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMSUB132PD regymm,regymm,mem ; VEX_FMA,SY
+ VFNMSUB132PD regymm,regymm,regymm ; VEX_FMA
+
+x VFNMSUB312PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMSUB312PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMSUB312PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMSUB312PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMSUB132SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFNMSUB132SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMSUB312SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFNMSUB312SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMSUB132SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFNMSUB132SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMSUB312SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFNMSUB312SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMADDSUB213PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADDSUB213PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADDSUB213PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMADDSUB213PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMADDSUB123PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADDSUB123PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADDSUB123PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADDSUB123PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADDSUB213PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADDSUB213PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADDSUB213PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMADDSUB213PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMADDSUB123PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADDSUB123PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADDSUB123PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADDSUB123PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUBADD213PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUBADD213PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUBADD213PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUBADD213PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUBADD123PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUBADD123PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUBADD123PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUBADD123PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUBADD213PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUBADD213PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUBADD213PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUBADD213PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUBADD123PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUBADD123PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUBADD123PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUBADD123PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD213PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADD213PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADD213PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMADD213PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMADD123PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADD123PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADD123PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADD123PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD213PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADD213PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADD213PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMADD213PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMADD123PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADD123PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADD123PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADD123PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD213SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFMADD213SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMADD123SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFMADD123SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMADD213SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFMADD213SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMADD123SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFMADD123SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMSUB213PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUB213PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUB213PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUB213PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUB123PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUB123PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUB123PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUB123PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUB213PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUB213PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUB213PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUB213PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUB123PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUB123PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUB123PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUB123PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUB213SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFMSUB213SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMSUB123SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFMSUB123SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMSUB213SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFMSUB213SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMSUB123SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFMSUB123SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMADD213PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMADD213PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMADD213PS regymm,regymm,mem ; VEX_FMA,SY
+ VFNMADD213PS regymm,regymm,regymm ; VEX_FMA
+
+x VFNMADD123PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMADD123PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMADD123PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMADD123PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMADD213PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMADD213PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMADD213PD regymm,regymm,mem ; VEX_FMA,SY
+ VFNMADD213PD regymm,regymm,regymm ; VEX_FMA
+
+x VFNMADD123PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMADD123PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMADD123PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMADD123PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMADD213SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFNMADD213SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMADD123SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFNMADD123SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMADD213SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFNMADD213SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMADD123SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFNMADD123SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMSUB213PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMSUB213PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMSUB213PS regymm,regymm,mem ; VEX_FMA,SY
+ VFNMSUB213PS regymm,regymm,regymm ; VEX_FMA
+
+x VFNMSUB123PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMSUB123PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMSUB123PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMSUB123PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMSUB213PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMSUB213PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMSUB213PD regymm,regymm,mem ; VEX_FMA,SY
+ VFNMSUB213PD regymm,regymm,regymm ; VEX_FMA
+
+x VFNMSUB123PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMSUB123PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMSUB123PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMSUB123PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMSUB213SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFNMSUB213SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMSUB123SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFNMSUB123SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMSUB213SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFNMSUB213SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMSUB123SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFNMSUB123SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMADDSUB231PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADDSUB231PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADDSUB231PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMADDSUB231PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMADDSUB321PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADDSUB321PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADDSUB321PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADDSUB321PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADDSUB231PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADDSUB231PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADDSUB231PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMADDSUB231PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMADDSUB321PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADDSUB321PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADDSUB321PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADDSUB321PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUBADD231PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUBADD231PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUBADD231PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUBADD231PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUBADD321PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUBADD321PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUBADD321PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUBADD321PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUBADD231PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUBADD231PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUBADD231PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUBADD231PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUBADD321PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUBADD321PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUBADD321PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUBADD321PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD231PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADD231PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADD231PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMADD231PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMADD321PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADD321PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADD321PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADD321PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD231PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMADD231PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMADD231PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMADD231PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMADD321PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMADD321PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMADD321PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMADD321PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMADD231SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFMADD231SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMADD321SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFMADD321SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMADD231SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFMADD231SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMADD321SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFMADD321SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMSUB231PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUB231PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUB231PS regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUB231PS regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUB321PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUB321PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUB321PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUB321PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUB231PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFMSUB231PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFMSUB231PD regymm,regymm,mem ; VEX_FMA,SY
+ VFMSUB231PD regymm,regymm,regymm ; VEX_FMA
+
+x VFMSUB321PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFMSUB321PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFMSUB321PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFMSUB321PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFMSUB231SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFMSUB231SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMSUB321SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFMSUB321SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFMSUB231SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFMSUB231SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFMSUB321SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFMSUB321SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMADD231PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMADD231PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMADD231PS regymm,regymm,mem ; VEX_FMA,SY
+ VFNMADD231PS regymm,regymm,regymm ; VEX_FMA
+
+x VFNMADD321PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMADD321PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMADD321PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMADD321PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMADD231PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMADD231PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMADD231PD regymm,regymm,mem ; VEX_FMA,SY
+ VFNMADD231PD regymm,regymm,regymm ; VEX_FMA
+
+x VFNMADD321PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMADD321PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMADD321PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMADD321PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMADD231SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFNMADD231SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMADD321SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFNMADD321SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMADD231SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFNMADD231SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMADD321SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFNMADD321SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMSUB231PS regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMSUB231PS regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMSUB231PS regymm,regymm,mem ; VEX_FMA,SY
+ VFNMSUB231PS regymm,regymm,regymm ; VEX_FMA
+
+x VFNMSUB321PS regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMSUB321PS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMSUB321PS regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMSUB321PS regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMSUB231PD regxmm,regxmm,mem ; VEX_FMA,SO
+ VFNMSUB231PD regxmm,regxmm,regxmm ; VEX_FMA
+ VFNMSUB231PD regymm,regymm,mem ; VEX_FMA,SY
+ VFNMSUB231PD regymm,regymm,regymm ; VEX_FMA
+
+x VFNMSUB321PD regxmm,regxmm,mem ; VEX_FMA,RELAX,SO
+x VFNMSUB321PD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+x VFNMSUB321PD regymm,regymm,mem ; VEX_FMA,RELAX,SY
+x VFNMSUB321PD regymm,regymm,regymm ; VEX_FMA,RELAX
+
+ VFNMSUB231SS regxmm,regxmm,mem ; VEX_FMA,SD
+ VFNMSUB231SS regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMSUB321SS regxmm,regxmm,mem ; VEX_FMA,RELAX,SD
+x VFNMSUB321SS regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VFNMSUB231SD regxmm,regxmm,mem ; VEX_FMA,SQ
+ VFNMSUB231SD regxmm,regxmm,regxmm ; VEX_FMA
+
+x VFNMSUB321SD regxmm,regxmm,mem ; VEX_FMA,RELAX,SQ
+x VFNMSUB321SD regxmm,regxmm,regxmm ; VEX_FMA,RELAX
+
+ VPCLMULLQLQDQ regxmm,regxmm,mem ; PCLMUL,VEX_AVX,SO
+ VPCLMULLQLQDQ regxmm,regxmm,regxmm ; PCLMUL,VEX_AVX
+ VPCLMULHQLQDQ regxmm,regxmm,mem ; PCLMUL,VEX_AVX,SO
+ VPCLMULHQLQDQ regxmm,regxmm,regxmm ; PCLMUL,VEX_AVX
+ VPCLMULLQHQDQ regxmm,regxmm,mem ; PCLMUL,VEX_AVX,SO
+ VPCLMULLQHQDQ regxmm,regxmm,regxmm ; PCLMUL,VEX_AVX
+ VPCLMULHQHQDQ regxmm,regxmm,mem ; PCLMUL,VEX_AVX,SO
+ VPCLMULHQHQDQ regxmm,regxmm,regxmm ; PCLMUL,VEX_AVX
+ VPCLMULQDQ regxmm,regxmm,mem,imm ; PCLMUL,VEX_AVX,SB3,SO
+ VPCLMULQDQ regxmm,regxmm,regxmm,imm ; PCLMUL,VEX_AVX,SB3
+
+; EOF
+
+
diff --git a/test/bcd.asm b/test/bcd.asm
new file mode 100644
index 0000000..bb45ca6
--- /dev/null
+++ b/test/bcd.asm
@@ -0,0 +1,21 @@
+ dt 765432109876543210p
+ dt -765432109876543210p
+ dt +765432109876543210p
+ dt 123p
+ dt -456p
+ dt +789p
+ dt 98765432109876543210p
+ dt 123.0
+ dt 0x123p+44
+ dt 789p
+
+ dt 0p765432109876543210
+ dt -0p765432109876543210
+ dt +0p765432109876543210
+ dt 0p123
+ dt -0p456
+ dt +0p789
+ dt 0p98765432109876543210
+ dt 123.0
+ dt 0x123p+44
+ dt 0p789
diff --git a/test/binexe.asm b/test/binexe.asm
new file mode 100644
index 0000000..2a9eb6e
--- /dev/null
+++ b/test/binexe.asm
@@ -0,0 +1,35 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -obinexe.exe -i../misc/; Files=stdout stderr binexe.exe
+;Testname=optimized; Arguments=-Ox -fbin -obinexe.exe -i../misc/; Files=stdout stderr binexe.exe
+
+; Demonstration of how to write an entire .EXE format program by using
+; the `exebin.mac' macro package.
+; To build:
+; nasm -fbin binexe.asm -o binexe.exe -ipath
+; (where `path' is such as to allow the %include directive to find
+; exebin.mac)
+; To test:
+; binexe
+; (should print `hello, world')
+
+%include "exebin.mac"
+
+ EXE_begin
+ EXE_stack 64 ; demonstrates overriding the 0x800 default
+
+ section .text
+
+ mov ax,cs
+ mov ds,ax
+
+ mov dx,hello
+ mov ah,9
+ int 0x21
+
+ mov ax,0x4c00
+ int 0x21
+
+ section .data
+
+hello: db 'hello, world', 13, 10, '$'
+
+ EXE_end
diff --git a/test/bintest.asm b/test/bintest.asm
new file mode 100644
index 0000000..57a3b2d
--- /dev/null
+++ b/test/bintest.asm
@@ -0,0 +1,59 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -obintest.bin; Files=stdout stderr bintest.bin
+;Testname=optimized; Arguments=-Ox -fbin -obintest.bin; Files=stdout stderr bintest.bin
+
+; test source file for assembling to binary files
+; build with:
+; nasm -f bin -o bintest.com bintest.asm
+
+; When run (as a DOS .COM file), this program should print
+; hello, world
+; on two successive lines, then exit cleanly.
+
+; This file should test the following:
+; [1] Define a text-section symbol
+; [2] Define a data-section symbol
+; [3] Define a BSS-section symbol
+; [4] Define a NASM local label
+; [5] Reference a NASM local label
+; [6] Reference a text-section symbol in the text section
+; [7] Reference a data-section symbol in the text section
+; [8] Reference a BSS-section symbol in the text section
+; [9] Reference a text-section symbol in the data section
+; [10] Reference a data-section symbol in the data section
+; [11] Reference a BSS-section symbol in the data section
+
+ BITS 16
+ ORG 0x100
+
+ SECTION .text
+
+ jmp start ; [6]
+
+endX mov ax,0x4c00 ; [1]
+ int 0x21
+
+start mov byte [bss_sym],',' ; [1] [8]
+ mov bx,[bssptr] ; [7]
+ mov al,[bx]
+ mov bx,[dataptr] ; [7]
+ mov [bx],al
+ mov cx,2
+.loop mov dx,datasym ; [1] [4] [7]
+ mov ah,9
+ push cx
+ int 0x21
+ pop cx
+ loop .loop ; [5] [6]
+ mov bx,[textptr] ; [7]
+ jmp bx
+
+ SECTION .data
+
+datasym db 'hello world', 13, 10, '$' ; [2]
+bssptr dw bss_sym ; [2] [11]
+dataptr dw datasym+5 ; [2] [10]
+textptr dw endX ; [2] [9]
+
+ SECTION .bss
+
+bss_sym resb 1 ; [3]
diff --git a/test/bisect.sh b/test/bisect.sh
new file mode 100755
index 0000000..98bdb37
--- /dev/null
+++ b/test/bisect.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Usage:
+
+# Make a test and a golden file, read ./performtest.pl --help
+
+# cd nasm
+# cp -r test somewhere (copy test dir out of the tree)
+# git bisect start HEAD nasm-2.07 (where HEAD is bad and nasm-2.07 is good)
+# git bisect run somewhere/test/bisect.sh br2148476 (what you want to test)
+
+# Done
+
+
+# Slow but sure
+./autogen.sh
+./configure
+make
+
+NASMDIR=$(pwd)
+cd $(dirname "$0")
+./performtest.pl "--nasm=$NASMDIR/nasm" "$1.asm" --verbose
diff --git a/test/br1879590.asm b/test/br1879590.asm
new file mode 100644
index 0000000..23e3872
--- /dev/null
+++ b/test/br1879590.asm
@@ -0,0 +1,25 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -obr1879590.bin; Files=stdout stderr br1879590.bin
+;Testname=optimized; Arguments=-Ox -fbin -obr1879590.bin; Files=stdout stderr br1879590.bin
+
+ bits 32
+
+ pavgb mm0,[ebx]
+ pavgb mm0,qword [ebx]
+ pavgw mm0,[ebx]
+ pavgw mm0,qword [ebx]
+ pavgb xmm0,[ebx]
+ pavgb xmm0,oword [ebx]
+ pavgw xmm0,[ebx]
+ pavgw xmm0,oword [ebx]
+
+ bits 64
+
+ pavgb mm0,[rbx]
+ pavgb mm0,qword [rbx]
+ pavgw mm0,[rbx]
+ pavgw mm0,qword [rbx]
+ pavgb xmm0,[rbx]
+ pavgb xmm0,oword [rbx]
+ pavgw xmm0,[rbx]
+ pavgw xmm0,oword [rbx]
+
diff --git a/test/br2003451.asm b/test/br2003451.asm
new file mode 100644
index 0000000..fb309a9
--- /dev/null
+++ b/test/br2003451.asm
@@ -0,0 +1,15 @@
+ cpu 8086
+ org 0
+
+ ; MOV r/m16,imm16
+ ; (imm16 given as number)
+ mov word [bx], 10h
+
+ ; MOV r/m16,imm16
+ ; (imm16 given as label)
+ mov word [bx], label
+
+ align 10h
+
+ ; This label is at address 10h
+label:
diff --git a/test/br2030823.asm b/test/br2030823.asm
new file mode 100644
index 0000000..ce7ba43
--- /dev/null
+++ b/test/br2030823.asm
@@ -0,0 +1,5 @@
+ bits 64
+ VFMADDPD xmm0, xmm1, [0], xmm3
+ VFMADDPD xmm0, xmm1, xmm2, [0]
+ VFMADDPD ymm0, ymm1, [0], ymm3
+ VFMADDPD ymm0, ymm1, ymm2, [0]
diff --git a/test/br2148476.asm b/test/br2148476.asm
new file mode 100644
index 0000000..b1ff0e8
--- /dev/null
+++ b/test/br2148476.asm
@@ -0,0 +1,221 @@
+;Testname=test; Arguments=-fbin -obr2148476.bin; Files=stdout stderr br2148476.bin
+
+ bits 64
+
+ cvtdq2pd xmm0, xmm1
+ cvtdq2pd xmm0, [rdi]
+ cvtdq2pd xmm0, qword [rdi]
+
+ cvtdq2ps xmm0, xmm1
+ cvtdq2ps xmm0, [rdi]
+ cvtdq2ps xmm0, oword [rdi]
+
+ cvtpd2dq xmm0, xmm1
+ cvtpd2dq xmm0, [rdi]
+ cvtpd2dq xmm0, oword [rdi]
+
+ cvtpd2pi mm0, xmm1
+ cvtpd2pi mm0, [rdi]
+ cvtpd2pi mm0, oword [rdi]
+
+ cvtpd2ps xmm0, xmm1
+ cvtpd2ps xmm0, [rdi]
+ cvtpd2ps xmm0, oword [rdi]
+
+ cvtpi2pd xmm0, mm1
+ cvtpi2pd xmm0, [rdi]
+ cvtpi2pd xmm0, qword [rdi]
+
+ cvtpi2ps xmm0, mm1
+ cvtpi2ps xmm0, [rdi]
+ cvtpi2ps xmm0, qword [rdi]
+
+ cvtps2dq xmm0, xmm1
+ cvtps2dq xmm0, [rdi]
+ cvtps2dq xmm0, oword [rdi]
+
+ cvtps2pd xmm0, xmm1
+ cvtps2pd xmm0, [rdi]
+ cvtps2pd xmm0, qword [rdi]
+
+ cvtps2pi mm0, xmm1
+ cvtps2pi mm0, [rdi]
+ cvtps2pi mm0, qword [rdi]
+
+ cvtsd2si eax, xmm1
+ cvtsd2si eax, [rdi]
+ cvtsd2si eax, qword [rdi]
+ cvtsd2si rax, xmm1
+ cvtsd2si rax, [rdi]
+ cvtsd2si rax, qword [rdi]
+
+ cvtsd2ss xmm0, xmm1
+ cvtsd2ss xmm0, [rdi]
+ cvtsd2ss xmm0, qword [rdi]
+
+ cvtsi2sd xmm0, eax
+ cvtsi2sd xmm0, [rdi] ; Compatibility
+ cvtsi2sd xmm0, dword [rdi]
+ cvtsi2sd xmm0, rax
+ cvtsi2sd xmm0, qword [rdi]
+
+ cvtsi2ss xmm0, eax
+ cvtsi2ss xmm0, [rdi] ; Compatibility
+ cvtsi2ss xmm0, dword [rdi]
+ cvtsi2ss xmm0, rax
+ cvtsi2ss xmm0, qword [rdi]
+
+ cvtss2sd xmm0, xmm1
+ cvtss2sd xmm0, [rdi]
+ cvtss2sd xmm0, dword [rdi]
+
+ cvtss2si eax, xmm1
+ cvtss2si eax, [rdi]
+ cvtss2si eax, dword [rdi]
+ cvtss2si rax, xmm1
+ cvtss2si rax, [rdi]
+ cvtss2si rax, dword [rdi]
+
+ cvttpd2dq xmm0, xmm1
+ cvttpd2dq xmm0, [rdi]
+ cvttpd2dq xmm0, oword [rdi]
+
+ cvttpd2pi mm0, xmm1
+ cvttpd2pi mm0, [rdi]
+ cvttpd2pi mm0, oword [rdi]
+
+ cvttps2dq xmm0, xmm1
+ cvttps2dq xmm0, [rdi]
+ cvttps2dq xmm0, oword [rdi]
+
+ cvttps2pi mm0, xmm1
+ cvttps2pi mm0, [rdi]
+ cvttps2pi mm0, qword [rdi]
+
+ cvttsd2si eax, xmm1
+ cvttsd2si eax, [rdi] ; Compatibility
+ cvttsd2si eax, qword [rdi]
+ cvttsd2si rax, xmm1
+ cvttsd2si rax, [rdi]
+ cvttsd2si rax, qword [rdi]
+
+ cvttss2si eax, xmm1
+ cvttss2si eax, [rdi] ; Compatibility
+ cvttss2si eax, dword [rdi]
+ cvttss2si rax, xmm1
+ cvttss2si rax, [rdi]
+ cvttss2si rax, dword [rdi]
+
+ vcvtdq2pd xmm0, xmm1
+ vcvtdq2pd xmm0, [rdi]
+ vcvtdq2pd xmm0, qword [rdi]
+ vcvtdq2pd ymm0, xmm1
+ vcvtdq2pd ymm0, [rdi]
+ vcvtdq2pd ymm0, oword [rdi]
+
+ vcvtdq2ps xmm0, xmm1
+ vcvtdq2ps xmm0, [rdi]
+ vcvtdq2ps xmm0, oword [rdi]
+ vcvtdq2ps ymm0, ymm1
+ vcvtdq2ps ymm0, [rdi]
+ vcvtdq2ps ymm0, yword [rdi]
+
+ vcvtpd2dq xmm0, xmm1
+ vcvtpd2dq xmm0, oword [rdi]
+ vcvtpd2dq xmm0, ymm1
+ vcvtpd2dq xmm0, yword [rdi]
+
+ vcvtpd2ps xmm0, xmm1
+ vcvtpd2ps xmm0, oword [rdi]
+ vcvtpd2ps xmm0, ymm1
+ vcvtpd2ps xmm0, yword [rdi]
+
+ vcvtps2dq xmm0, xmm1
+ vcvtps2dq xmm0, [rdi]
+ vcvtps2dq xmm0, oword [rdi]
+ vcvtps2dq ymm0, ymm1
+ vcvtps2dq ymm0, [rdi]
+ vcvtps2dq ymm0, yword [rdi]
+
+ vcvtps2pd xmm0, xmm1
+ vcvtps2pd xmm0, [rdi]
+ vcvtps2pd xmm0, qword [rdi]
+ vcvtps2pd ymm0, xmm1
+ vcvtps2pd ymm0, [rdi]
+ vcvtps2pd ymm0, oword [rdi]
+
+ vcvtsd2si eax, xmm1
+ vcvtsd2si eax, [rdi]
+ vcvtsd2si eax, qword [rdi]
+ vcvtsd2si rax, xmm1
+ vcvtsd2si rax, [rdi]
+ vcvtsd2si rax, qword [rdi]
+
+ vcvtsd2ss xmm0, xmm1
+ vcvtsd2ss xmm0, [rdi]
+ vcvtsd2ss xmm0, qword [rdi]
+ vcvtsd2ss xmm0, xmm1, xmm2
+ vcvtsd2ss xmm0, xmm1, [rdi]
+ vcvtsd2ss xmm0, xmm1, qword [rdi]
+
+ vcvtsi2sd xmm0, eax
+ vcvtsi2sd xmm0, [rdi] ; Compatibility
+ vcvtsi2sd xmm0, dword [rdi]
+ vcvtsi2sd xmm0, rax
+ vcvtsi2sd xmm0, qword [rdi]
+ vcvtsi2sd xmm0, xmm1, eax
+ vcvtsi2sd xmm0, xmm1, [rdi] ; Compatibility
+ vcvtsi2sd xmm0, xmm1, dword [rdi]
+ vcvtsi2sd xmm0, xmm1, rax
+ vcvtsi2sd xmm0, xmm1, qword [rdi]
+
+ vcvtsi2ss xmm0, eax
+ vcvtsi2ss xmm0, [rdi] ; Compatibility
+ vcvtsi2ss xmm0, dword [rdi]
+ vcvtsi2ss xmm0, rax
+ vcvtsi2ss xmm0, qword [rdi]
+ vcvtsi2ss xmm0, xmm1, eax
+ vcvtsi2ss xmm0, xmm1, [rdi] ; Compatibility
+ vcvtsi2ss xmm0, xmm1, dword [rdi]
+ vcvtsi2ss xmm0, xmm1, rax
+ vcvtsi2ss xmm0, xmm1, qword [rdi]
+
+ vcvtss2sd xmm0, xmm1
+ vcvtss2sd xmm0, [rdi]
+ vcvtss2sd xmm0, dword [rdi]
+ vcvtss2sd xmm0, xmm1, xmm2
+ vcvtss2sd xmm0, xmm1, [rdi]
+ vcvtss2sd xmm0, xmm1, dword [rdi]
+
+ vcvtss2si eax, xmm1
+ vcvtss2si eax, [rdi]
+ vcvtss2si eax, dword [rdi]
+ vcvtss2si rax, xmm1
+ vcvtss2si rax, [rdi]
+ vcvtss2si rax, dword [rdi]
+
+ vcvttpd2dq xmm0, xmm1
+ vcvttpd2dq xmm0, oword [rdi]
+ vcvttpd2dq xmm0, ymm1
+ vcvttpd2dq xmm0, yword [rdi]
+
+ vcvttps2dq xmm0, xmm1
+ vcvttps2dq xmm0, [rdi]
+ vcvttps2dq xmm0, oword [rdi]
+ vcvttps2dq ymm0, ymm1
+ vcvttps2dq ymm0, [rdi]
+ vcvttps2dq ymm0, yword [rdi]
+
+ vcvttsd2si eax, xmm1
+ vcvttsd2si eax, [rdi] ; Compatibility
+ vcvttsd2si eax, qword [rdi]
+ vcvttsd2si rax, xmm1
+ vcvttsd2si rax, [rdi]
+ vcvttsd2si rax, qword [rdi]
+
+ vcvttss2si eax, xmm1
+ vcvttss2si eax, [rdi] ; Compatibility
+ vcvttss2si eax, dword [rdi]
+ vcvttss2si rax, xmm1
+ vcvttss2si rax, [rdi]
+ vcvttss2si rax, dword [rdi]
diff --git a/test/br2222615.asm b/test/br2222615.asm
new file mode 100644
index 0000000..7acef6c
--- /dev/null
+++ b/test/br2222615.asm
@@ -0,0 +1,19 @@
+;Testname=noerror; Arguments=-fbin -obr2222615.bin; Files=stdout stderr br2222615.bin
+;Testname=error; Arguments=-DERROR -fbin -obr2222615.bin; Files=stdout stderr br2222615.bin
+
+%macro bluttan 0
+ nop
+%endmacro
+
+%ifnmacro bluttan
+ %error "bluttan is a macro"
+%endif
+
+%ifmacro blej
+ %error "blej is not a macro"
+%endif
+
+%ifdef ERROR
+ %ifnmacro
+ %endif
+%endif
diff --git a/test/br560575.asm b/test/br560575.asm
new file mode 100644
index 0000000..a252db6
--- /dev/null
+++ b/test/br560575.asm
@@ -0,0 +1,17 @@
+;Testname=aout; Arguments=-faout -obr560575.o; Files=stderr stdout br560575.o
+;Testname=aoutb; Arguments=-faoutb -obr560575.o; Files=stderr stdout br560575.o
+;Testname=coff; Arguments=-fcoff -obr560575.o; Files=stderr stdout br560575.o
+;Testname=elf32; Arguments=-felf32 -obr560575.o; Files=stderr stdout br560575.o
+;Testname=elf64; Arguments=-felf64 -obr560575.o; Files=stderr stdout br560575.o
+;Testname=as86; Arguments=-fas86 -obr560575.o; Files=stderr stdout br560575.o
+;Testname=win32; Arguments=-fwin32 -obr560575.o; Files=stderr stdout br560575.o
+;Testname=win64; Arguments=-fwin64 -obr560575.o; Files=stderr stdout br560575.o
+;Testname=rdf; Arguments=-frdf -obr560575.o; Files=stderr stdout br560575.o
+;Testname=ieee; Arguments=-fieee -obr560575.o; Files=stderr stdout br560575.o
+;Testname=macho; Arguments=-fmacho -obr560575.o; Files=stderr stdout br560575.o
+
+;Test for bug report 560575 - Using SEG with non-relocatable values doesn't work
+;
+ dw seg ~1
+ dw seg "a"
+ dw seg 'a'
diff --git a/test/br560873.asm b/test/br560873.asm
new file mode 100644
index 0000000..2133492
--- /dev/null
+++ b/test/br560873.asm
@@ -0,0 +1,27 @@
+;Testname=unoptimized; Arguments=-O0 -frdf -obr560873.rdf; Files=stdout stderr br560873.rdf
+;Testname=optimized; Arguments=-Ox -frdf -obr560873.rdf; Files=stdout stderr br560873.rdf
+
+label:
+ bits 16
+ call far dword label
+ mov [label],ax
+ mov [label],eax
+ mov [word label],ax
+ mov [word label],eax
+ mov [dword label],ax
+ mov [dword label],eax
+ push 3700
+ push word 3700
+ push dword 3700
+
+ bits 32
+ call far word label
+ mov [label],ax
+ mov [label],eax
+ mov [word label],ax
+ mov [word label],eax
+ mov [dword label],ax
+ mov [dword label],eax
+ push 3700
+ push word 3700
+ push dword 3700
diff --git a/test/br890790.asm b/test/br890790.asm
new file mode 100644
index 0000000..a002382
--- /dev/null
+++ b/test/br890790.asm
@@ -0,0 +1,7 @@
+;Testname=test; Arguments=-fbin -obr890790.bin; Files=stdout stderr br890790.bin
+%rep 5
+ db 0
+ %include "br890790_i.asm"
+%endrep
+
+db 1
diff --git a/test/br890790_i.asm b/test/br890790_i.asm
new file mode 100644
index 0000000..7ff797f
--- /dev/null
+++ b/test/br890790_i.asm
@@ -0,0 +1 @@
+db 2
diff --git a/test/changed.asm b/test/changed.asm
new file mode 100644
index 0000000..7ea2cc4
--- /dev/null
+++ b/test/changed.asm
@@ -0,0 +1,383 @@
+;This file demonstrates many of the differences between NASM version X and NASM
+;version 0.97
+;
+; changed.asm is copyright (C) 1998 John S. Fine
+;
+; It may be redistributed under the same conditions as NASM as described in
+; LICENSE file in the NASM archive
+;_________________________________
+;
+; nasm changed.asm -l changed.lst
+;
+; When assembled without any -d switches, it includes examples which:
+; Work correctly in version X
+; and Work incorrectly and/or display warnings in version 0.97
+; and Do not prevent the generation of output in version 0.97
+;
+; Not all the differences can be seen in the .lst file. I suggest that you use
+; "ndisasm changes" to examine the code actually generated.
+;_________________________________
+;
+; nasm changed.asm -l changed.lst -doldmsg
+;
+; When assembled with -doldmsg, it adds examples which:
+; Work correctly in version X
+; and Generate error messages in version 0.97 and do not generate output
+;_________________________________
+;
+; nasm changed.asm -l changed.lst -doldcrash
+;
+; When assembled with -doldcrash, it adds examples which:
+; Work correctly in version X
+; and Cause NASM to crash in version 0.97
+;_________________________________
+;
+; nasm changed.asm -l changed.lst -dnewmsg
+;
+; When assembled with -dnewmsg, it adds examples which:
+; Generate error messages in version X
+; and Generate wrong output without warning or error message in version 0.97
+;-----------------------------------------------------------------------------
+
+; Please note that I have reported the name of the person who made the
+; correction based on very limited information. In several cases, I am sure I
+; will identify the wrong author. Please send me any corrections; I don't
+; intend to insult or exclude anyone.
+
+;-----------------------------------------------------------------------------
+; Bug fixed by Simon in assemble()
+;
+; The following generated "call next" / "call next-1" instead of
+; two copies of "call next"
+;
+ times 2 a16 call next
+next:
+
+;-----------------------------------------------------------------------------
+; Bug fixed by John in parse_line() (and other routines)
+;
+; This used to jmp to prior.1, when it should be here.1
+;
+prior:
+.1:
+here: jmp .1
+.1:
+
+;-----------------------------------------------------------------------------
+; Bug fixed by John in assemble()
+;
+; Strings used in dq and dt were not zero filled correctly
+;
+ dq 'b'
+
+
+;-----------------------------------------------------------------------------
+; Bug fixed by Simon in isn_names[]
+;
+; Was not recognised as an instruction
+;
+ int01 ; Instead of INT1
+
+;-----------------------------------------------------------------------------
+; Bug fixed by Jim Hague in ???
+;
+; Forward references were instruction level rather than per operand
+;
+ shr word [forwardref],1
+forwardref:
+
+;-----------------------------------------------------------------------------
+; Bug fixed by John in preproc.c
+;
+; It used to silently discard id characters appended to a multi-line
+; macro parameter (such as the x in %1x below).
+;
+%macro xxx 1
+%1: nop
+%{1}x: jmp %1x
+%endmacro
+xxx yyy
+
+;-----------------------------------------------------------------------------
+; Bug added by John in preproc.c 0.98-J4, removed by John in 0.98-J5
+;
+; Tested here to make sure it stays removed
+;
+%macro TestElse 1
+%if %1=0
+%elif %1=1
+nop
+%endif
+%endmacro
+TestElse 1
+
+%ifdef oldmsg
+;***************************************************************
+;
+; The following examples will generate error messages in 0.97 and will generate
+; correct output in the new version.
+
+;-----------------------------------------------------------------------------
+; Bug fixed by Simon in isns.dat
+;
+; The optional "near" was not permitted on JMP and CALL
+;
+ jmp near here
+
+;-----------------------------------------------------------------------------
+; Feature added by Simon in stdscan()
+;
+; You can now use the numeric value of strings in %assign
+;
+%assign xxx 'ABCD'
+ dd xxx
+
+;-----------------------------------------------------------------------------
+; Feature added by John in add_vectors()
+;
+; Stranger address expressions are now supported as long as they resolve to
+; something valid.
+;
+ mov ax, [eax + ebx + ecx - eax]
+
+;-----------------------------------------------------------------------------
+; Bug fixed by Simon in ???
+;
+; The EQU directive affected local labels in a way that was inconsistent
+; between passes
+;
+.local:
+neither equ $
+ jmp .local
+
+;-----------------------------------------------------------------------------
+; Feature added by Jules in parse_line
+;
+; You can override a size specifier
+;
+%define arg1 dword [bp+4]
+ cmp word arg1, 2
+
+;-----------------------------------------------------------------------------
+; Bug fixed by John in preproc.c
+;
+; You could not use a label on the same line with a macro invocation, if the
+; macro definition began with a preprocessor directive.
+;
+ struc mytype
+.long resd 1
+ endstruc
+
+lbl istruc mytype
+ at mytype.long, dd 'ABCD'
+ iend
+
+;-----------------------------------------------------------------------------
+; Warning removed by John in preproc.c
+;
+; In order to allow macros that extend the definition of instructions, I
+; disabled the warning on a multi-line macro referencing itself.
+;
+%endif ;NASM 0.97 doesn't handle %0 etc. inside false %if
+%macro push 1-* ;
+%rep %0 ;
+push %1 ;
+%rotate 1 ;
+%endrep ;
+%endmacro ;
+%ifdef oldmsg ;
+
+ push ax,bx
+
+;-----------------------------------------------------------------------------
+; Warning removed by John in preproc.c
+;
+; To support other types of macros that extend the definition of instructions,
+; I disabled the warning on a multi-line macro called with the wrong number of
+; parameters. PUSH and POP can be extended equally well by either method, but
+; other intruction extensions may need one method or the other, so I made both
+; work.
+;
+; Note that neither of these warnings was really needed, because a later stage
+; of NASM would almost always give an adequate error message if the macro use
+; really was wrong.
+;
+%endif
+%macro pop 2-*
+%rep %0
+pop %1
+%rotate 1
+%endrep
+%endmacro
+%ifdef oldmsg
+
+ pop ax,bx
+%endif
+
+
+%ifdef newmsg ;***************************************************************
+
+;-----------------------------------------------------------------------------
+; Bug fixed by John in parse_line() (and other routines)
+;
+; This invalid code used to assemble without errors
+;
+myself equ myself+1
+ jmp myself
+
+;-----------------------------------------------------------------------------
+; Change made by John in preproc.c
+;
+; In 0.97, an id that appears as a label on a macro invocation was always
+; prepended to the first line of the macro expansion. That caused several
+; bugs, but also could be used in tricks like the arg macro in c16.mac and
+; c32.mac.
+;
+; In version X, an id that appears as a label on a macro invocation will
+; normally be defined as a label for the address at which the macro is
+; invoked, regardless of whether the first line of the macro expansion is
+; something that can take a label. The new token %00 may be used for any
+; of the situations in which the old prepend behavior was doing something
+; tricky but useful. %00 can also be used more than once and in places
+; other than the start of the expansion.
+;
+%endif
+%assign arg_off 0
+
+%imacro arg 0-1 2 ;arg defined the old way
+ equ arg_off
+%assign arg_off %1+arg_off
+%endmacro
+
+%ifdef newmsg
+arg_example arg
+%endif
+
+%imacro arg2 0-1 2 ;arg defined the new way
+%00 equ arg_off
+%assign arg_off %1+arg_off
+%endmacro
+
+%ifdef oldmsg
+arg_example2 arg2
+
+;-----------------------------------------------------------------------------
+; Change made by Jules and John in INSNS.DAT
+;
+; Various instruction in which the size of an immediate is built-in to the
+; instruction set, now allow you to redundantly specify that size as long
+; as you specify it correctly
+;
+ AAD byte 5
+ AAM byte 5
+ BT bx, byte 3
+ BTC cx, byte 4
+ BTR dx, byte 5
+ BTS si, byte 6
+ IN eax, byte 0x40
+ INT byte 21h
+ OUT byte 70h, ax
+ RET word 2
+ RETN word 2
+ RETF word 4
+
+; note "ENTER" has not been changed yet.
+
+;-----------------------------------------------------------------------------
+; Enhancement by hpa in insns.dat et al
+;
+; Simplified adding new instructions, and added some missing instructions
+;
+ int03 ; Instead of INT3
+ ud1 ; No documented mnemonic for this one
+ ud2
+ sysenter
+ sysexit
+ syscall
+ sysret
+ fxsave [ebx]
+ fxrstor [es:ebx+esi*4+0x3000]
+
+;-----------------------------------------------------------------------------
+; Enhancement by hpa in insns.dat et al
+;
+; Actually make SSE work, and use the -p option to ndisasm to select
+; one of several aliased opcodes
+;
+ sqrtps xmm0,[ebx+10] ; SSE opcode
+ paddsiw mm0,[ebx+10] ; Cyrix opcode with the same byte seq.
+
+;-----------------------------------------------------------------------------
+; Enhancement by hpa in preproc.c
+;
+; Support %undef to remoce a single-line macro
+;
+%define TEST_ME 42
+%ifndef TEST_ME
+%error "TEST_ME not defined after %define"
+%endif
+
+%undef TEST_ME
+%ifdef TEST_ME
+%error "TEST_ME defined after %undef"
+%endif
+
+;-----------------------------------------------------------------------------
+; Bug fix by hpa in insns.dat
+;
+; PSHUFW and PINSRW weren't handling the implicit sizes correctly; all of
+; the entries below are (or should be) legal
+;
+ pshufw mm2, mm1, 3
+ pshufw mm3,[ebx],2
+ pshufw mm7,[0+edi*8],1
+
+ pshufw mm2, mm1, byte 3
+ pshufw mm3,[ebx],byte 2
+ pshufw mm7,[0+edi*8],byte 1
+
+ pshufw mm2, mm1, 3
+ pshufw mm3, qword [ebx], 2
+ pshufw mm7, qword [0+edi*8], 1
+
+ pshufw mm2, mm1, byte 3
+ pshufw mm3, qword [ebx], byte 2
+ pshufw mm7, qword [0+edi*8], byte 1
+
+ pinsrw mm1, [esi], 1
+ pinsrw mm1, word [esi], 1
+ pinsrw mm1, [esi], byte 1
+ pinsrw mm1, word [esi], byte 1
+
+
+%endif ; oldmsg
+
+%ifdef oldcrash ;*************************************************************
+
+This_label_is_256_characters_long__There_used_to_be_a_bug_in_stdscan_which_made_it_crash_when_it_did_a_keyword_search_on_any_label_longer_than_255_characters__Now_anything_longer_than_MAX_KEYWORD_is_always_a_symbol__It_will_not_even_try_a_keyword_search___
+
+;-----------------------------------------------------------------------------
+; Bug fixed by John in preproc.c
+;
+; Builds of NASM that prohibit dereferencing a NULL pointer used to crash if a
+; macro that started with a blank line was invoked with a label
+;
+%macro empty_macro 0
+
+%endm
+
+emlabel empty_macro
+ jmp emlabel
+
+;-----------------------------------------------------------------------------
+; Enhancement by Conan Brink in preproc.c
+;
+; Allow %rep to be nested
+;
+%rep 4
+%rep 5
+ nop
+%endrep
+%endrep
+
+%endif
diff --git a/test/cofftest.asm b/test/cofftest.asm
new file mode 100644
index 0000000..6b845e2
--- /dev/null
+++ b/test/cofftest.asm
@@ -0,0 +1,85 @@
+;Cannot be automatically tested because it differs every time,
+;I guess because of a date/time field.
+
+; test source file for assembling to COFF
+; build with (under DJGPP, for example):
+; nasm -f coff cofftest.asm
+; gcc -o cofftest cofftest.c cofftest.o
+
+; This file should test the following:
+; [1] Define and export a global text-section symbol
+; [2] Define and export a global data-section symbol
+; [3] Define and export a global BSS-section symbol
+; [4] Define a non-global text-section symbol
+; [5] Define a non-global data-section symbol
+; [6] Define a non-global BSS-section symbol
+; [7] Define a COMMON symbol
+; [8] Define a NASM local label
+; [9] Reference a NASM local label
+; [10] Import an external symbol
+; [11] Make a PC-relative call to an external symbol
+; [12] Reference a text-section symbol in the text section
+; [13] Reference a data-section symbol in the text section
+; [14] Reference a BSS-section symbol in the text section
+; [15] Reference a text-section symbol in the data section
+; [16] Reference a data-section symbol in the data section
+; [17] Reference a BSS-section symbol in the data section
+
+ BITS 32
+ GLOBAL _lrotate ; [1]
+ GLOBAL _greet ; [1]
+ GLOBAL _asmstr ; [2]
+ GLOBAL _textptr ; [2]
+ GLOBAL _selfptr ; [2]
+ GLOBAL _integer ; [3]
+ EXTERN _printf ; [10]
+ COMMON _commvar 4 ; [7]
+
+ SECTION .text
+
+; prototype: long lrotate(long x, int num);
+_lrotate: ; [1]
+ push ebp
+ mov ebp,esp
+ mov eax,[ebp+8]
+ mov ecx,[ebp+12]
+.label rol eax,1 ; [4] [8]
+ loop .label ; [9] [12]
+ mov esp,ebp
+ pop ebp
+ ret
+
+; prototype: void greet(void);
+_greet mov eax,[_integer] ; [14]
+ inc eax
+ mov [localint],eax ; [14]
+ push dword [_commvar]
+ mov eax,[localptr] ; [13]
+ push dword [eax]
+ push dword [_integer] ; [1] [14]
+ push dword _printfstr ; [13]
+ call _printf ; [11]
+ add esp,16
+ ret
+
+ SECTION .data
+
+; a string
+_asmstr db 'hello, world', 0 ; [2]
+
+; a string for Printf
+_printfstr db "integer==%d, localint==%d, commvar=%d"
+ db 10, 0
+
+; some pointers
+localptr dd localint ; [5] [17]
+_textptr dd _greet ; [15]
+_selfptr dd _selfptr ; [16]
+
+ SECTION .bss
+
+; an integer
+_integer resd 1 ; [3]
+
+; a local integer
+localint resd 1 ; [6]
diff --git a/test/cofftest.c b/test/cofftest.c
new file mode 100644
index 0000000..77f610f
--- /dev/null
+++ b/test/cofftest.c
@@ -0,0 +1,35 @@
+/*
+ * test source file for assembling to COFF
+ * build with (under DJGPP, for example):
+ * nasm -f coff cofftest.asm
+ * gcc -o cofftest cofftest.c cofftest.o
+ */
+
+#include <stdio.h>
+#include <inttypes.h>
+
+extern int lrotate(int32_t, int);
+extern void greet(void);
+extern int8_t asmstr[];
+extern void *selfptr;
+extern void *textptr;
+extern int integer, commvar;
+
+int main(void)
+{
+
+ printf("Testing lrotate: should get 0x00400000, 0x00000001\n");
+ printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000, 4));
+ printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000, 14));
+
+ printf("This string should read `hello, world': `%s'\n", asmstr);
+
+ printf("The integers here should be 1234, 1235 and 4321:\n");
+ integer = 1234;
+ commvar = 4321;
+ greet();
+
+ printf("These pointers should be equal: %p and %p\n", &greet, textptr);
+
+ printf("So should these: %p and %p\n", selfptr, &selfptr);
+}
diff --git a/test/crc32.asm b/test/crc32.asm
new file mode 100644
index 0000000..c1ddb29
--- /dev/null
+++ b/test/crc32.asm
@@ -0,0 +1,37 @@
+;Testname=test; Arguments=-fbin -ocrc32.bin; Files=stdout stderr crc32.bin
+
+ bits 16
+
+ crc32 eax,cl
+ crc32 eax,byte [di]
+ crc32 eax,cx
+ crc32 eax,word [di]
+ crc32 eax,ecx
+ crc32 eax,dword [di]
+
+ bits 32
+ align 16
+
+ crc32 eax,cl
+ crc32 eax,byte [edi]
+ crc32 eax,cx
+ crc32 eax,word [edi]
+ crc32 eax,ecx
+ crc32 eax,dword [edi]
+
+ bits 64
+ align 16
+
+ crc32 eax,cl
+ crc32 eax,byte [rdi]
+ crc32 eax,r9b
+ crc32 eax,cx
+ crc32 eax,word [rdi]
+ crc32 eax,ecx
+ crc32 eax,dword [rdi]
+ crc32 rax,cl
+ crc32 rax,byte [rdi]
+ crc32 rax,r9b
+ crc32 rax,rcx
+ crc32 rax,qword [rdi]
+ crc32 rax,r9
diff --git a/test/dtbcd.asm b/test/dtbcd.asm
new file mode 100644
index 0000000..fcccff6
--- /dev/null
+++ b/test/dtbcd.asm
@@ -0,0 +1,72 @@
+;
+; This is a macro to generate packed BCD constants.
+; It is obsoleted by "dt" with a packed BCD value with a "p"
+; suffix, but it is included here as a rest of nested %rep.
+;
+%macro dtbcd 1-*.nolist
+ %push dtbcd
+ %rep %0
+ %defstr %$abc %1
+ %substr %$sign %$abc 1
+ %if %$sign == '-'
+ %substr %$abc %$abc 2,-1
+ %xdefine %$sign 0x80
+ %elif %$sign == '+'
+ %substr %$abc %$abc 2,-1
+ %xdefine %$sign 0x00
+ %else
+ %xdefine %$sign 0x00
+ %endif
+ %strlen %$abclen %$abc
+ %defstr %$abclen_str %$abclen
+ %assign %$pos %$abclen
+ %assign %$bc 0
+ %assign %$ld -1
+ %rep %$abclen
+ %substr %$chr %$abc %$pos
+ %assign %$pos %$pos-1
+ %if %$chr >= '0' && %$chr <= '9'
+ %if %$ld < 0
+ %assign %$ld %$chr-'0'
+ %assign %$bc %$bc+1
+ %if %$bc > 9
+ %warning "too many digits in BCD constant"
+ %exitrep
+ %endif
+ %else
+ db %$ld+((%$chr-'0') << 4)
+ %assign %$ld -1
+ %endif
+ %elif %$chr == '_'
+ ; Do nothing...
+ %else
+ %error "invalid character in BCD constant"
+ %exitrep
+ %endif
+ %endrep
+ %if %$ld >= 0
+ db %$ld
+ %endif
+ %rep 9-%$bc
+ db 0
+ %endrep
+ db %$sign
+ %rotate 1
+ %endrep
+ %pop
+%endmacro
+
+ dtbcd 123, -456, +789
+ dt 123p, -456p, +789p
+ dtbcd 765432109876543210
+ dt 765432109876543210p
+ dtbcd -765432109876543210
+ dt -765432109876543210p
+ dtbcd +765_432_109_876_543_210
+ dt +765_432_109_876_543_210p
+ dtbcd -765_432_109_876_543_210
+ dt -765_432_109_876_543_210p
+
+ ;; Both of these should warn...
+ dtbcd 8_765_432_109_876_543_210
+ dt 8_765_432_109_876_543_210p
diff --git a/test/elf64so.asm b/test/elf64so.asm
new file mode 100644
index 0000000..f1b2346
--- /dev/null
+++ b/test/elf64so.asm
@@ -0,0 +1,118 @@
+; test source file for assembling to ELF64 shared library
+; build with:
+; nasm -f elf64 elf64so.asm
+; ld -shared -o elf64so.so elf64so.o
+; test with:
+; gcc -o elf64so elftest64.c ./elf64so.so
+; ./elf64so
+
+; This file should test the following:
+; [1] Define and export a global text-section symbol
+; [2] Define and export a global data-section symbol
+; [3] Define and export a global BSS-section symbol
+; [4] Define a non-global text-section symbol
+; [5] Define a non-global data-section symbol
+; [6] Define a non-global BSS-section symbol
+; [7] Define a COMMON symbol
+; [8] Define a NASM local label
+; [9] Reference a NASM local label
+; [10] Import an external symbol
+; [11] Make a PC-relative call to an external symbol
+; [12] Reference a text-section symbol in the text section
+; [13] Reference a data-section symbol in the text section
+; [14] Reference a BSS-section symbol in the text section
+; [15] Reference a text-section symbol in the data section
+; [16] Reference a data-section symbol in the data section
+; [17] Reference a BSS-section symbol in the data section
+
+ BITS 64
+ GLOBAL lrotate:function ; [1]
+ GLOBAL greet_s:function ; [1]
+ GLOBAL greet_m:function ; [1]
+ GLOBAL asmstr:data asmstr.end-asmstr ; [2]
+ GLOBAL textptr:data 8 ; [2]
+ GLOBAL selfptr:data 8 ; [2]
+ GLOBAL useless:data 8 ; [3]
+ GLOBAL integer:data 8 ; [3]
+ EXTERN printf ; [10]
+ COMMON commvar 8:8 ; [7]
+ EXTERN _GLOBAL_OFFSET_TABLE_
+
+ SECTION .text
+
+; prototype: long lrotate(long x, int num);
+lrotate: ; [1]
+ push rbp
+ mov rbp,rsp
+ mov rax,rdi
+ mov rcx,rsi
+.label rol rax,1 ; [4] [8]
+ loop .label ; [9] [12]
+ mov rsp,rbp
+ pop rbp
+ ret
+
+;; prototype: void greet_*(void);
+;;
+;; Arguments are: rdi - rsi - rdx - rcx - r8 - r9
+;; Registers: rbx, rbp, r12-r15 are saved
+;; greet_s() is Small PIC model, greet_m() is Medium PIC model
+;; (Large model cannot be linked with other code)
+;;
+greet_s:
+ ;; This instruction is useless, this is only a test...
+ cmp qword [rel integer wrt ..got],0
+ mov rax,[rel commvar wrt ..got] ; &commvar
+ mov rcx,[rax] ; commvar
+ mov rax,[rel integer wrt ..got] ; &integer
+ mov rsi,[rax]
+ lea rdx,[rsi+1]
+ mov [rel localint],rdx ; localint = integer+1
+ mov rax,[rel localptr] ; localptr
+ mov rdx,[rax] ; *localptr = localint
+ lea rdi,[rel printfstr]
+ xor eax,eax ; No fp arguments
+ jmp printf wrt ..plt ; [10]
+
+greet_m:
+ push r15 ; Used by convention...
+ lea r15,[rel _GLOBAL_OFFSET_TABLE_]
+ mov rax,[rel commvar wrt ..got] ; &commvar
+ mov rcx,[rax] ; commvar
+ mov rax,[rel integer wrt ..got] ; &integer
+ mov rsi,[rax]
+ lea rdx,[rsi+1]
+ mov rax,localint wrt ..gotoff ; &localint - r15
+ mov [rax+r15],rdx ; localint = integer+1
+ mov rax,localptr wrt ..gotoff ; &localptr - r15
+ mov rax,[rax+r15] ; localptr
+ mov rdx,[rax] ; *localptr = localint
+ mov rdi,printfstr wrt ..gotoff ; &printfstr - r15
+ add rdi,r15 ; &printfstr
+ xor eax,eax ; No fp arguments
+ pop r15
+ jmp printf wrt ..plt ; [10]
+
+ SECTION .data
+
+; a string
+asmstr db 'hello, world', 0 ; [2]
+.end:
+
+; a string for Printf
+printfstr db "integer=%ld, localint=%ld, commvar=%ld", 10, 0
+
+; some pointers
+localptr dq localint ; [5] [17]
+textptr dq greet_s wrt ..sym ; [15]
+selfptr dq selfptr wrt ..sym ; [16]
+
+ SECTION .bss
+; a useless symbol
+useless resq 1
+
+; an integer
+integer resq 1 ; [3]
+
+; a local integer
+localint resq 1 ; [6]
diff --git a/test/elfso.asm b/test/elfso.asm
new file mode 100644
index 0000000..e72497b
--- /dev/null
+++ b/test/elfso.asm
@@ -0,0 +1,100 @@
+;Testname=unoptimized; Arguments=-O0 -felf -oelfso.o; Files=stdout stderr elfso.o
+;Testname=optimized; Arguments=-Ox -felf -oelfso.o; Files=stdout stderr elfso.o
+
+; test source file for assembling to ELF shared library
+; build with:
+; nasm -f elf elfso.asm
+; ld -shared -o elfso.so elfso.o
+; test with:
+; gcc -o elfso elftest.c ./elfso.so
+; ./elfso
+; (assuming your gcc is ELF, and you're running bash)
+
+; This file should test the following:
+; [1] Define and export a global text-section symbol
+; [2] Define and export a global data-section symbol
+; [3] Define and export a global BSS-section symbol
+; [4] Define a non-global text-section symbol
+; [5] Define a non-global data-section symbol
+; [6] Define a non-global BSS-section symbol
+; [7] Define a COMMON symbol
+; [8] Define a NASM local label
+; [9] Reference a NASM local label
+; [10] Import an external symbol
+; [11] Make a PC-relative call to an external symbol
+; [12] Reference a text-section symbol in the text section
+; [13] Reference a data-section symbol in the text section
+; [14] Reference a BSS-section symbol in the text section
+; [15] Reference a text-section symbol in the data section
+; [16] Reference a data-section symbol in the data section
+; [17] Reference a BSS-section symbol in the data section
+
+ BITS 32
+ GLOBAL lrotate:function ; [1]
+ GLOBAL greet:function ; [1]
+ GLOBAL asmstr:data asmstr.end-asmstr ; [2]
+ GLOBAL textptr:data 4 ; [2]
+ GLOBAL selfptr:data 4 ; [2]
+ GLOBAL integer:data 4 ; [3]
+ EXTERN printf ; [10]
+ COMMON commvar 4:4 ; [7]
+ EXTERN _GLOBAL_OFFSET_TABLE_
+
+ SECTION .text
+
+; prototype: long lrotate(long x, int num);
+lrotate: ; [1]
+ push ebp
+ mov ebp,esp
+ mov eax,[ebp+8]
+ mov ecx,[ebp+12]
+.label rol eax,1 ; [4] [8]
+ loop .label ; [9] [12]
+ mov esp,ebp
+ pop ebp
+ ret
+
+; prototype: void greet(void);
+greet push ebx ; we'll use EBX for GOT, so save it
+ call .getgot
+.getgot: pop ebx
+ add ebx,_GLOBAL_OFFSET_TABLE_ + $$ - .getgot wrt ..gotpc
+ mov eax,[ebx+integer wrt ..got] ; [14]
+ mov eax,[eax]
+ inc eax
+ mov [ebx+localint wrt ..gotoff],eax ; [14]
+ mov eax,[ebx+commvar wrt ..got]
+ push dword [eax]
+ mov eax,[ebx+localptr wrt ..gotoff] ; [13]
+ push dword [eax]
+ mov eax,[ebx+integer wrt ..got] ; [1] [14]
+ push dword [eax]
+ lea eax,[ebx+printfstr wrt ..gotoff]
+ push eax ; [13]
+ call printf wrt ..plt ; [11]
+ add esp,16
+ pop ebx
+ ret
+
+ SECTION .data
+
+; a string
+asmstr db 'hello, world', 0 ; [2]
+.end
+
+; a string for Printf
+printfstr db "integer==%d, localint==%d, commvar=%d"
+ db 10, 0
+
+; some pointers
+localptr dd localint ; [5] [17]
+textptr dd greet wrt ..sym ; [15]
+selfptr dd selfptr wrt ..sym ; [16]
+
+ SECTION .bss
+
+; an integer
+integer resd 1 ; [3]
+
+; a local integer
+localint resd 1 ; [6]
diff --git a/test/elftest.asm b/test/elftest.asm
new file mode 100644
index 0000000..fcfb362
--- /dev/null
+++ b/test/elftest.asm
@@ -0,0 +1,87 @@
+; test source file for assembling to ELF
+; build with:
+; nasm -f elf elftest.asm
+; gcc -o elftest elftest.c elftest.o
+; (assuming your gcc is ELF)
+
+; This file should test the following:
+; [1] Define and export a global text-section symbol
+; [2] Define and export a global data-section symbol
+; [3] Define and export a global BSS-section symbol
+; [4] Define a non-global text-section symbol
+; [5] Define a non-global data-section symbol
+; [6] Define a non-global BSS-section symbol
+; [7] Define a COMMON symbol
+; [8] Define a NASM local label
+; [9] Reference a NASM local label
+; [10] Import an external symbol
+; [11] Make a PC-relative call to an external symbol
+; [12] Reference a text-section symbol in the text section
+; [13] Reference a data-section symbol in the text section
+; [14] Reference a BSS-section symbol in the text section
+; [15] Reference a text-section symbol in the data section
+; [16] Reference a data-section symbol in the data section
+; [17] Reference a BSS-section symbol in the data section
+; [18] Define a non-global rodata-section symbol
+
+ BITS 32
+ GLOBAL lrotate ; [1]
+ GLOBAL greet ; [1]
+ GLOBAL asmstr ; [2]
+ GLOBAL textptr ; [2]
+ GLOBAL selfptr ; [2]
+ GLOBAL integer ; [3]
+ EXTERN printf ; [10]
+ COMMON commvar 4 ; [7]
+
+ SECTION .text
+
+; prototype: long lrotate(long x, int num);
+lrotate: ; [1]
+ push ebp
+ mov ebp,esp
+ mov eax,[ebp+8]
+ mov ecx,[ebp+12]
+.label rol eax,1 ; [4] [8]
+ loop .label ; [9] [12]
+ mov esp,ebp
+ pop ebp
+ ret
+
+; prototype: void greet(void);
+greet mov eax,[integer] ; [14]
+ inc eax
+ mov [localint],eax ; [14]
+ push dword [commvar]
+ mov eax,[localptr] ; [13]
+ push dword [eax]
+ push dword [integer] ; [1] [14]
+ push dword printfstr ; [13]
+ call printf ; [11]
+ add esp,16
+ ret
+
+ SECTION .data
+
+; a string
+asmstr db 'hello, world', 0 ; [2]
+
+; a string for Printf
+printfstr db "integer==%d, localint==%d, commvar=%d"
+ db 10, 0
+
+; some pointers
+localptr dd localint ; [5] [17]
+textptr dd greet ; [15]
+selfptr dd selfptr ; [16]
+
+ SECTION .bss
+
+; an integer
+integer resd 1 ; [3]
+
+; a local integer
+localint resd 1 ; [6]
+
+ SECTION .rodata
+readonly dd readonly ; [18]
diff --git a/test/elftest.c b/test/elftest.c
new file mode 100644
index 0000000..42b3f7e
--- /dev/null
+++ b/test/elftest.c
@@ -0,0 +1,38 @@
+/*
+ * test source file for assembling to ELF
+ * build with:
+ * nasm -f elf elftest.asm
+ * gcc -o elftest elftest.c elftest.o
+ * (assuming your gcc is ELF)
+ */
+
+#include <stdio.h>
+#include <inttypes.h>
+
+extern int lrotate(int32_t, int);
+extern void greet(void);
+extern int8_t asmstr[];
+extern void *selfptr;
+extern void *textptr;
+extern int integer, commvar;
+
+int main(void)
+{
+
+ printf("Testing lrotate: should get 0x00400000, 0x00000001\n");
+ printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000, 4));
+ printf("lrotate(0x00040000, 14) = 0x%08lx\n", lrotate(0x40000, 14));
+
+ printf("This string should read `hello, world': `%s'\n", asmstr);
+
+ printf("The integers here should be 1234, 1235 and 4321:\n");
+ integer = 1234;
+ commvar = 4321;
+ greet();
+
+ printf("These pointers should be equal: %p and %p\n", &greet, textptr);
+
+ printf("So should these: %p and %p\n", selfptr, &selfptr);
+
+ return 0;
+}
diff --git a/test/elftest64.c b/test/elftest64.c
new file mode 100644
index 0000000..1f3dec1
--- /dev/null
+++ b/test/elftest64.c
@@ -0,0 +1,43 @@
+/*
+ * build with:
+ * nasm -f elf64 elf64so.asm
+ * ld -shared -o elf64so.so elf64so.o
+ * test with:
+ * gcc -o elf64so elftest64.c ./elf64so.so
+ * ./elf64so
+ */
+
+#include <stdio.h>
+#include <inttypes.h>
+
+extern long lrotate(long, int);
+extern void greet_s(void);
+extern void greet_m(void);
+extern int8_t asmstr[];
+extern void *selfptr;
+extern void *textptr;
+extern long integer;
+long commvar;
+
+int main(void)
+{
+
+ printf("Testing lrotate: should get 0x00400000, 0x00000001\n");
+ printf("lrotate(0x00040000, 4) = 0x%08lx\n", lrotate(0x40000, 4));
+ printf("lrotate(0x00040000, 46) = 0x%08lx\n", lrotate(0x40000, 46));
+
+ printf("This string should read `hello, world': `%s'\n", asmstr);
+
+ printf("&integer = %p, &commvar = %p\n", &integer, &commvar);
+ printf("The integers here should be 1234, 1235 and 4321:\n");
+ integer = 1234;
+ commvar = 4321;
+ greet_s();
+ greet_m();
+
+ printf("These pointers should be equal: %p and %p\n", &greet_s, textptr);
+
+ printf("So should these: %p and %p\n", selfptr, &selfptr);
+
+ return 0;
+}
diff --git a/test/elif.asm b/test/elif.asm
new file mode 100644
index 0000000..49e6668
--- /dev/null
+++ b/test/elif.asm
@@ -0,0 +1,39 @@
+;Testname=unoptimized; Arguments=-O0 -fobj -oelif.obj; Files=stdout stderr elif.obj
+;Testname=optimized; Arguments=-Ox -fobj -oelif.obj; Files=stdout stderr elif.obj
+
+%macro DosPrintMsg 1+
+%ifnid %1
+section .data
+%%str_to_print:db %1
+section .text
+ mov dx,%%str_to_print
+ mov ah,9
+ int 0x21
+%else
+ mov dx,(%1)
+ mov ah,9
+ int 0x21
+%endif
+%endmacro
+
+%macro DosExit 1
+%if (%1) == 0
+;use short-form return 0 exit
+ int 0x20
+%elif ((%1) < 256) && ((%1) > 0)
+ mov ax,0x4C00 | (%1)
+ int 0x21
+%else
+%error Invalid return value
+%endif
+%endmacro
+
+org 0x100
+ DosPrintMsg predefined_str
+ DosPrintMsg "Using string with macro-defined label",10,0
+ DosExit 0
+ DosExit 1
+ DosExit 256
+
+section .data
+predefined_str:db "Using string with predefined label",10,0
diff --git a/test/expimp.asm b/test/expimp.asm
new file mode 100644
index 0000000..89e32a1
--- /dev/null
+++ b/test/expimp.asm
@@ -0,0 +1,90 @@
+;Testname=O0; Arguments=-O0 -fbin -oexpimp.bin; Files=stdout stderr expimp.bin
+;Testname=O1; Arguments=-O1 -fbin -oexpimp.bin; Files=stdout stderr expimp.bin
+;Testname=Ox; Arguments=-Ox -fbin -oexpimp.bin; Files=stdout stderr expimp.bin
+;Testname=error-O0; Arguments=-O0 -fbin -oexpimp.bin -DERROR; Files=stdout stderr expimp.bin
+;Testname=error-Ox; Arguments=-Ox -fbin -oexpimp.bin -DERROR; Files=stdout stderr expimp.bin
+
+;
+; Test of explicitly and implicitly sized operands
+;
+ BITS 32
+
+ add esi,2 ; Implicit
+ add esi,123456h ; Implicit
+ add esi,byte 2 ; Explicit
+ add esi,dword 2 ; Explicit
+ add esi,dword 123456h ; Explicit
+ add esi,byte 123456h ; Explicit Truncation
+
+ add esi,strict 2 ; Implicit Strict
+ add esi,strict 123456h ; Implicit Strict
+ add esi,strict byte 2 ; Explicit Strict
+ add esi,strict dword 2 ; Explicit Strict
+ add esi,strict dword 123456h ; Explicit Strict
+ add esi,strict byte 123456h ; Explicit Strict Truncation
+
+ add eax,2 ; Implicit
+ add eax,123456h ; Implicit
+ add eax,byte 2 ; Explicit
+ add eax,dword 2 ; Explicit
+ add eax,dword 123456h ; Explicit
+ add eax,byte 123456h ; Explicit Truncation
+
+ add eax,strict 2 ; Implicit Strict
+ add eax,strict 123456h ; Implicit Strict
+ add eax,strict byte 2 ; Explicit Strict
+ add eax,strict dword 2 ; Explicit Strict
+ add eax,strict dword 123456h ; Explicit Strict
+ add eax,strict byte 123456h ; Explicit Strict Truncation
+
+ imul dx,3 ; Implicit
+ imul dx,byte 3 ; Explicit
+ imul dx,word 3 ; Explicit
+ imul dx,strict byte 3 ; Explicit Strict
+ imul dx,strict word 3 ; Explicit Strict
+
+;
+; Same thing with branches
+;
+start:
+ jmp short start ; Explicit
+ jmp near start ; Explicit
+ jmp word start ; Explicit
+ jmp dword start ; Explicit
+ jmp short forward ; Explicit
+ jmp near forward ; Explicit
+ jmp word forward ; Explicit
+ jmp dword forward ; Explicit
+%ifdef ERROR
+ jmp short faraway ; Explicit (ERROR)
+%endif
+ jmp near faraway ; Explicit
+ jmp word faraway ; Explicit
+ jmp dword faraway ; Explicit
+ jmp start ; Implicit
+ jmp forward ; Implicit
+ jmp faraway ; Implicit
+
+ jmp strict short start ; Explicit Strict
+ jmp strict near start ; Explicit Strict
+ jmp strict word start ; Explicit Strict
+ jmp strict dword start ; Explicit Strict
+ jmp strict short forward ; Explicit Strict
+ jmp strict near forward ; Explicit Strict
+ jmp strict word forward ; Explicit Strict
+ jmp strict dword forward ; Explicit Strict
+%ifdef ERROR
+ jmp strict short faraway ; Explicit (ERROR)
+%endif
+ jmp strict near faraway ; Explicit Strict
+ jmp strict word faraway ; Explicit Strict
+ jmp strict dword faraway ; Explicit Strict
+ jmp strict start ; Implicit Strict
+ jmp strict forward ; Implicit Strict
+ jmp strict faraway ; Implicit Strict
+forward:
+
+ times 256 nop
+faraway:
+
+
diff --git a/test/far64.asm b/test/far64.asm
new file mode 100644
index 0000000..e18bca4
--- /dev/null
+++ b/test/far64.asm
@@ -0,0 +1,10 @@
+;Testname=test; Arguments=-fbin -ofar64.bin; Files=stdout stderr far64.bin
+; BR 2039212
+ bits 64
+
+ call qword far [rax]
+ jmp qword far [rax]
+ call dword far [rax]
+ jmp dword far [rax]
+ call far [rax]
+ jmp far [rax]
diff --git a/test/float.asm b/test/float.asm
new file mode 100644
index 0000000..88519b2
--- /dev/null
+++ b/test/float.asm
@@ -0,0 +1,186 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -ofloat.bin; Files=stdout stderr float.bin
+;Testname=optimized; Arguments=-Ox -fbin -ofloat.bin; Files=stdout stderr float.bin
+
+;
+; Test of floating-point formats
+;
+
+; 8-bit
+ db 1.0
+ db +1.0
+ db -1.0
+ db 1.5
+ db +1.5
+ db -1.5
+ db 0.0
+ db +0.0
+ db -0.0
+ db 1.83203125
+ db +1.83203125
+ db -1.83203125
+ db 1.83203125e1
+ db +1.83203125e1
+ db -1.83203125e1
+ db 1.83203125e-1
+ db +1.83203125e-1
+ db -1.83203125e-1
+ db 1.13203125e-2 ; Denormal!
+ db +1.13203125e-2 ; Denormal!
+ db -1.13203125e-2 ; Denormal!
+ db __Infinity__
+ db +__Infinity__
+ db -__Infinity__
+ db __NaN__
+ db __QNaN__
+ db __SNaN__
+ db 3.1415926535_8979323846_2643383279_5028841971_6939937510_5
+
+; 16-bit
+ dw 1.0
+ dw +1.0
+ dw -1.0
+ dw 1.5
+ dw +1.5
+ dw -1.5
+ dw 0.0
+ dw +0.0
+ dw -0.0
+ dw 1.83203125
+ dw +1.83203125
+ dw -1.83203125
+ dw 1.83203125e3
+ dw +1.83203125e3
+ dw -1.83203125e3
+ dw 1.83203125e-3
+ dw +1.83203125e-3
+ dw -1.83203125e-3
+ dw 1.83203125e-6 ; Denormal!
+ dw +1.83203125e-6 ; Denormal!
+ dw -1.83203125e-6 ; Denormal!
+ dw __Infinity__
+ dw +__Infinity__
+ dw -__Infinity__
+ dw __NaN__
+ dw __QNaN__
+ dw __SNaN__
+ dw 3.1415926535_8979323846_2643383279_5028841971_6939937510_5
+
+; 32-bit
+ dd 1.0
+ dd +1.0
+ dd -1.0
+ dd 1.5
+ dd +1.5
+ dd -1.5
+ dd 0.0
+ dd +0.0
+ dd -0.0
+ dd 1.83203125
+ dd +1.83203125
+ dd -1.83203125
+ dd 1.83203125e15
+ dd +1.83203125e15
+ dd -1.83203125e15
+ dd 1.83203125e-15
+ dd +1.83203125e-15
+ dd -1.83203125e-15
+ dd 1.83203125e-40 ; Denormal!
+ dd +1.83203125e-40 ; Denormal!
+ dd -1.83203125e-40 ; Denormal!
+ dd __Infinity__
+ dd +__Infinity__
+ dd -__Infinity__
+ dd __NaN__
+ dd __QNaN__
+ dd __SNaN__
+ dd 3.1415926535_8979323846_2643383279_5028841971_6939937510_5
+
+; 64-bit
+ dq 1.0
+ dq +1.0
+ dq -1.0
+ dq 1.5
+ dq +1.5
+ dq -1.5
+ dq 0.0
+ dq +0.0
+ dq -0.0
+ dq 1.83203125
+ dq +1.83203125
+ dq -1.83203125
+ dq 1.83203125e300
+ dq +1.83203125e300
+ dq -1.83203125e300
+ dq 1.83203125e-300
+ dq +1.83203125e-300
+ dq -1.83203125e-300
+ dq 1.83203125e-320 ; Denormal!
+ dq +1.83203125e-320 ; Denormal!
+ dq -1.83203125e-320 ; Denormal!
+ dq __Infinity__
+ dq +__Infinity__
+ dq -__Infinity__
+ dq __NaN__
+ dq __QNaN__
+ dq __SNaN__
+ dq 3.1415926535_8979323846_2643383279_5028841971_6939937510_5
+
+; 80-bit
+ dt 1.0
+ dt +1.0
+ dt -1.0
+ dt 1.5
+ dt +1.5
+ dt -1.5
+ dt 0.0
+ dt +0.0
+ dt -0.0
+ dt 1.83203125
+ dt +1.83203125
+ dt -1.83203125
+ dt 1.83203125e+4000
+ dt +1.83203125e+4000
+ dt -1.83203125e+4000
+ dt 1.83203125e-4000
+ dt +1.83203125e-4000
+ dt -1.83203125e-4000
+ dt 1.83203125e-4940 ; Denormal!
+ dt +1.83203125e-4940 ; Denormal!
+ dt -1.83203125e-4940 ; Denormal!
+ dt __Infinity__
+ dt +__Infinity__
+ dt -__Infinity__
+ dt __NaN__
+ dt __QNaN__
+ dt __SNaN__
+ dt 3.1415926535_8979323846_2643383279_5028841971_6939937510_5
+
+; 128-bit
+ do 1.0
+ do +1.0
+ do -1.0
+ do 1.5
+ do +1.5
+ do -1.5
+ do 0.0
+ do +0.0
+ do -0.0
+ do 1.83203125
+ do +1.83203125
+ do -1.83203125
+ do 1.83203125e+4000
+ do +1.83203125e+4000
+ do -1.83203125e+4000
+ do 1.83203125e-4000
+ do +1.83203125e-4000
+ do -1.83203125e-4000
+ do 1.83203125e-4940 ; Denormal!
+ do +1.83203125e-4940 ; Denormal!
+ do -1.83203125e-4940 ; Denormal!
+ do __Infinity__
+ do +__Infinity__
+ do -__Infinity__
+ do __NaN__
+ do __QNaN__
+ do __SNaN__
+ do 3.1415926535_8979323846_2643383279_5028841971_6939937510_5
diff --git a/test/float8.asm b/test/float8.asm
new file mode 100644
index 0000000..d59abec
--- /dev/null
+++ b/test/float8.asm
@@ -0,0 +1,135 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -ofloat8.bin; Files=stdout stderr float8.bin
+;Testname=optimized; Arguments=-Ox -fbin -ofloat8.bin; Files=stdout stderr float8.bin
+
+; Test of 8-bit floating-point constants
+
+ ; Zero
+ db 0.0 ; 00h
+
+ ; Denorms
+ db 0.001953125 ; 01h
+ db 0.00390625 ; 02h
+ db 0.005859375 ; 03h
+ db 0.0078125 ; 04h
+ db 0.009765625 ; 05h
+ db 0.01171875 ; 06h
+ db 0.013671875 ; 07h
+
+ ; Normals
+ db 0.015625 ; 08h
+ db 0.017578125 ; 09h
+ db 0.01953125 ; 0Ah
+ db 0.021484375 ; 0Bh
+ db 0.0234375 ; 0Ch
+ db 0.025390625 ; 0Dh
+ db 0.02734375 ; 0Eh
+ db 0.029296875 ; 0Fh
+ db 0.03125 ; 10h
+ db 0.03515625 ; 11h
+ db 0.0390625 ; 12h
+ db 0.04296875 ; 13h
+ db 0.046875 ; 14h
+ db 0.05078125 ; 15h
+ db 0.0546875 ; 16h
+ db 0.05859375 ; 17h
+ db 0.0625 ; 18h
+ db 0.0703125 ; 19h
+ db 0.078125 ; 1Ah
+ db 0.0859375 ; 1Bh
+ db 0.09375 ; 1Ch
+ db 0.1015625 ; 1Dh
+ db 0.109375 ; 1Eh
+ db 0.1171875 ; 1Fh
+ db 0.125 ; 20h
+ db 0.140625 ; 21h
+ db 0.15625 ; 22h
+ db 0.171875 ; 23h
+ db 0.1875 ; 24h
+ db 0.203125 ; 25h
+ db 0.21875 ; 26h
+ db 0.234375 ; 27h
+ db 0.25 ; 28h
+ db 0.28125 ; 29h
+ db 0.3125 ; 2Ah
+ db 0.34375 ; 2Bh
+ db 0.375 ; 2Ch
+ db 0.40625 ; 2Dh
+ db 0.4375 ; 2Eh
+ db 0.46875 ; 2Fh
+ db 0.5 ; 30h
+ db 0.5625 ; 31h
+ db 0.625 ; 32h
+ db 0.6875 ; 33h
+ db 0.75 ; 34h
+ db 0.8125 ; 35h
+ db 0.875 ; 36h
+ db 0.9375 ; 37h
+ db 1.0 ; 38h
+ db 1.125 ; 39h
+ db 1.25 ; 3Ah
+ db 1.375 ; 3Bh
+ db 1.5 ; 3Ch
+ db 1.625 ; 3Dh
+ db 1.75 ; 3Eh
+ db 1.875 ; 3Fh
+ db 2.0 ; 40h
+ db 2.25 ; 41h
+ db 2.5 ; 42h
+ db 2.75 ; 43h
+ db 3.0 ; 44h
+ db 3.25 ; 45h
+ db 3.5 ; 46h
+ db 3.75 ; 47h
+ db 4.0 ; 48h
+ db 4.5 ; 49h
+ db 5.0 ; 4Ah
+ db 5.5 ; 4Bh
+ db 6.0 ; 4Ch
+ db 6.5 ; 4Dh
+ db 7.0 ; 4Eh
+ db 7.5 ; 4Fh
+ db 8.0 ; 50h
+ db 9.0 ; 51h
+ db 10.0 ; 52h
+ db 11.0 ; 53h
+ db 12.0 ; 54h
+ db 13.0 ; 55h
+ db 14.0 ; 56h
+ db 15.0 ; 57h
+ db 16.0 ; 58h
+ db 18.0 ; 59h
+ db 20.0 ; 5Ah
+ db 22.0 ; 5Bh
+ db 24.0 ; 5Ch
+ db 26.0 ; 5Dh
+ db 28.0 ; 5Eh
+ db 30.0 ; 5Fh
+ db 32.0 ; 60h
+ db 36.0 ; 61h
+ db 40.0 ; 62h
+ db 44.0 ; 63h
+ db 48.0 ; 64h
+ db 52.0 ; 65h
+ db 56.0 ; 66h
+ db 60.0 ; 67h
+ db 64.0 ; 68h
+ db 72.0 ; 69h
+ db 80.0 ; 6Ah
+ db 88.0 ; 6Bh
+ db 96.0 ; 6Ch
+ db 104.0 ; 6Dh
+ db 112.0 ; 6Eh
+ db 120.0 ; 6Fh
+ db 128.0 ; 70h
+ db 144.0 ; 71h
+ db 160.0 ; 72h
+ db 176.0 ; 73h
+ db 192.0 ; 74h
+ db 208.0 ; 75h
+ db 224.0 ; 76h
+ db 240.0 ; 77h
+
+ ; Exceptionals
+ db __Infinity__ ; 78h
+ db __SNaN__ ; 79h
+ db __QNaN__ ; 7Ch
diff --git a/test/floatb.asm b/test/floatb.asm
new file mode 100644
index 0000000..dc0422e
--- /dev/null
+++ b/test/floatb.asm
@@ -0,0 +1,35 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -ofloatb.bin; Files=stdout stderr floatb.bin
+;Testname=optimized; Arguments=-Ox -fbin -ofloatb.bin; Files=stdout stderr floatb.bin
+
+ ;; Known problematic floating-point numbers and their proper
+ ;; encoding...
+
+ bits 64
+
+ dd 1.1e10
+ dd 0x5023e9ac ; Should be...
+
+ dd 50.40e9
+ dd 0x513bc130 ; Should be...
+
+ dq 1.4e23
+ dq 0x44bda56a4b0835c0
+
+ dq 50.48e21
+ dq 0x44a5610d7502feae
+
+ dt 1.2e28
+ dq 0x9b18ab5df7180b6c
+ dw 0x405c
+
+ dt 50.46e25
+ dq 0xd0b29a67e95dcb60
+ dw 0x4057
+
+ ;; Way too big numbers, should overflow to +Inf
+ dd 1.0E646456955
+ dd 1.0E646456956
+ dd 1.0E2147483646
+ dd 1.0E2147483647
+ dd 1.0E2147483648
+ dd 1.0E2147483649
diff --git a/test/floatexp.asm b/test/floatexp.asm
new file mode 100644
index 0000000..2bc359e
--- /dev/null
+++ b/test/floatexp.asm
@@ -0,0 +1,382 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -ofloatexp.bin; Files=stdout stderr floatexp.bin
+;Testname=optimized; Arguments=-Ox -fbin -ofloatexp.bin; Files=stdout stderr floatexp.bin
+
+ bits 64
+;
+; Test of floating-point formats
+;
+
+; 8-bit
+ mov al,__float8__(1.0)
+ mov al,__float8__(+1.0)
+ mov al,__float8__(-1.0)
+ mov al,__float8__(0.0)
+ mov al,__float8__(+0.0)
+ mov al,__float8__(-0.0)
+ mov al,__float8__(1.83203125)
+ mov al,__float8__(+1.83203125)
+ mov al,__float8__(-1.83203125)
+ mov al,__float8__(1.83203125e1)
+ mov al,__float8__(+1.83203125e1)
+ mov al,__float8__(-1.83203125e1)
+ mov al,__float8__(1.83203125e-1)
+ mov al,__float8__(+1.83203125e-1)
+ mov al,__float8__(-1.83203125e-1)
+ mov al,__float8__(1.13203125e-2) ; Denormal!
+ mov al,__float8__(+1.13203125e-2) ; Denormal!
+ mov al,__float8__(-1.13203125e-2) ; Denormal!
+ mov al,__float8__(__Infinity__)
+ mov al,__float8__(+__Infinity__)
+ mov al,__float8__(-__Infinity__)
+ mov al,__float8__(__NaN__)
+ mov al,__float8__(__QNaN__)
+ mov al,__float8__(__SNaN__)
+
+; 16-bit
+ mov ax,__float16__(1.0)
+ mov ax,__float16__(+1.0)
+ mov ax,__float16__(-1.0)
+ mov ax,__float16__(0.0)
+ mov ax,__float16__(+0.0)
+ mov ax,__float16__(-0.0)
+ mov ax,__float16__(1.83203125)
+ mov ax,__float16__(+1.83203125)
+ mov ax,__float16__(-1.83203125)
+ mov ax,__float16__(1.83203125e3)
+ mov ax,__float16__(+1.83203125e3)
+ mov ax,__float16__(-1.83203125e3)
+ mov ax,__float16__(1.83203125e-3)
+ mov ax,__float16__(+1.83203125e-3)
+ mov ax,__float16__(-1.83203125e-3)
+ mov ax,__float16__(1.83203125e-6) ; Denormal!
+ mov ax,__float16__(+1.83203125e-6) ; Denormal!
+ mov ax,__float16__(-1.83203125e-6) ; Denormal!
+ mov ax,__float16__(__Infinity__)
+ mov ax,__float16__(+__Infinity__)
+ mov ax,__float16__(-__Infinity__)
+ mov ax,__float16__(__NaN__)
+ mov ax,__float16__(__QNaN__)
+ mov ax,__float16__(__SNaN__)
+
+; 32-bit
+ mov eax,__float32__(1.0)
+ mov eax,__float32__(+1.0)
+ mov eax,__float32__(-1.0)
+ mov eax,__float32__(0.0)
+ mov eax,__float32__(+0.0)
+ mov eax,__float32__(-0.0)
+ mov eax,__float32__(1.83203125)
+ mov eax,__float32__(+1.83203125)
+ mov eax,__float32__(-1.83203125)
+ mov eax,__float32__(1.83203125e15)
+ mov eax,__float32__(+1.83203125e15)
+ mov eax,__float32__(-1.83203125e15)
+ mov eax,__float32__(1.83203125e-15)
+ mov eax,__float32__(+1.83203125e-15)
+ mov eax,__float32__(-1.83203125e-15)
+ mov eax,__float32__(1.83203125e-40) ; Denormal!
+ mov eax,__float32__(+1.83203125e-40) ; Denormal!
+ mov eax,__float32__(-1.83203125e-40) ; Denormal!
+ mov eax,__float32__(__Infinity__)
+ mov eax,__float32__(+__Infinity__)
+ mov eax,__float32__(-__Infinity__)
+ mov eax,__float32__(__NaN__)
+ mov eax,__float32__(__QNaN__)
+ mov eax,__float32__(__SNaN__)
+
+; 64-bit
+ mov rax,__float64__(1.0)
+ mov rax,__float64__(+1.0)
+ mov rax,__float64__(-1.0)
+ mov rax,__float64__(0.0)
+ mov rax,__float64__(+0.0)
+ mov rax,__float64__(-0.0)
+ mov rax,__float64__(1.83203125)
+ mov rax,__float64__(+1.83203125)
+ mov rax,__float64__(-1.83203125)
+ mov rax,__float64__(1.83203125e300)
+ mov rax,__float64__(+1.83203125e300)
+ mov rax,__float64__(-1.83203125e300)
+ mov rax,__float64__(1.83203125e-300)
+ mov rax,__float64__(+1.83203125e-300)
+ mov rax,__float64__(-1.83203125e-300)
+ mov rax,__float64__(1.83203125e-320) ; Denormal!
+ mov rax,__float64__(+1.83203125e-320) ; Denormal!
+ mov rax,__float64__(-1.83203125e-320) ; Denormal!
+ mov rax,__float64__(__Infinity__)
+ mov rax,__float64__(+__Infinity__)
+ mov rax,__float64__(-__Infinity__)
+ mov rax,__float64__(__NaN__)
+ mov rax,__float64__(__QNaN__)
+ mov rax,__float64__(__SNaN__)
+
+; 80-bit
+ mov rax,__float80m__(1.0)
+ mov ax,__float80e__(1.0)
+ mov rax,__float80m__(+1.0)
+ mov ax,__float80e__(+1.0)
+ mov rax,__float80m__(-1.0)
+ mov ax,__float80e__(-1.0)
+ mov rax,__float80m__(0.0)
+ mov ax,__float80e__(0.0)
+ mov rax,__float80m__(+0.0)
+ mov ax,__float80e__(+0.0)
+ mov rax,__float80m__(-0.0)
+ mov ax,__float80e__(-0.0)
+ mov rax,__float80m__(1.83203125)
+ mov ax,__float80e__(1.83203125)
+ mov rax,__float80m__(+1.83203125)
+ mov ax,__float80e__(+1.83203125)
+ mov rax,__float80m__(-1.83203125)
+ mov ax,__float80e__(-1.83203125)
+ mov rax,__float80m__(1.83203125e+4000)
+ mov ax,__float80e__(1.83203125e+4000)
+ mov rax,__float80m__(+1.83203125e+4000)
+ mov ax,__float80e__(+1.83203125e+4000)
+ mov rax,__float80m__(-1.83203125e+4000)
+ mov ax,__float80e__(-1.83203125e+4000)
+ mov rax,__float80m__(1.83203125e-4000)
+ mov ax,__float80e__(1.83203125e-4000)
+ mov rax,__float80m__(+1.83203125e-4000)
+ mov ax,__float80e__(+1.83203125e-4000)
+ mov rax,__float80m__(-1.83203125e-4000)
+ mov ax,__float80e__(-1.83203125e-4000)
+ mov rax,__float80m__(1.83203125e-4940) ; Denormal!
+ mov ax,__float80e__(1.83203125e-4940) ; Denormal!
+ mov rax,__float80m__(+1.83203125e-4940) ; Denormal!
+ mov ax,__float80e__(+1.83203125e-4940) ; Denormal!
+ mov rax,__float80m__(-1.83203125e-4940) ; Denormal!
+ mov ax,__float80e__(-1.83203125e-4940) ; Denormal!
+ mov rax,__float80m__(__Infinity__)
+ mov ax,__float80e__(__Infinity__)
+ mov rax,__float80m__(+__Infinity__)
+ mov ax,__float80e__(+__Infinity__)
+ mov rax,__float80m__(-__Infinity__)
+ mov ax,__float80e__(-__Infinity__)
+ mov rax,__float80m__(__NaN__)
+ mov ax,__float80e__(__NaN__)
+ mov rax,__float80m__(__QNaN__)
+ mov ax,__float80e__(__QNaN__)
+ mov rax,__float80m__(__SNaN__)
+ mov ax,__float80e__(__SNaN__)
+
+; 128-bit
+ mov rax,__float128l__(1.0)
+ mov rax,__float128h__(1.0)
+ mov rax,__float128l__(+1.0)
+ mov rax,__float128h__(+1.0)
+ mov rax,__float128l__(-1.0)
+ mov rax,__float128h__(-1.0)
+ mov rax,__float128l__(0.0)
+ mov rax,__float128h__(0.0)
+ mov rax,__float128l__(+0.0)
+ mov rax,__float128h__(+0.0)
+ mov rax,__float128l__(-0.0)
+ mov rax,__float128h__(-0.0)
+ mov rax,__float128l__(1.83203125)
+ mov rax,__float128h__(1.83203125)
+ mov rax,__float128l__(+1.83203125)
+ mov rax,__float128h__(+1.83203125)
+ mov rax,__float128l__(-1.83203125)
+ mov rax,__float128h__(-1.83203125)
+ mov rax,__float128l__(1.83203125e+4000)
+ mov rax,__float128h__(1.83203125e+4000)
+ mov rax,__float128l__(+1.83203125e+4000)
+ mov rax,__float128h__(+1.83203125e+4000)
+ mov rax,__float128l__(-1.83203125e+4000)
+ mov rax,__float128h__(-1.83203125e+4000)
+ mov rax,__float128l__(1.83203125e-4000)
+ mov rax,__float128h__(1.83203125e-4000)
+ mov rax,__float128l__(+1.83203125e-4000)
+ mov rax,__float128h__(+1.83203125e-4000)
+ mov rax,__float128l__(-1.83203125e-4000)
+ mov rax,__float128h__(-1.83203125e-4000)
+ mov rax,__float128l__(1.83203125e-4940) ; Denormal!
+ mov rax,__float128h__(1.83203125e-4940) ; Denormal!
+ mov rax,__float128l__(+1.83203125e-4940) ; Denormal!
+ mov rax,__float128h__(+1.83203125e-4940) ; Denormal!
+ mov rax,__float128l__(-1.83203125e-4940) ; Denormal!
+ mov rax,__float128h__(-1.83203125e-4940) ; Denormal!
+ mov rax,__float128l__(__Infinity__)
+ mov rax,__float128h__(__Infinity__)
+ mov rax,__float128l__(+__Infinity__)
+ mov rax,__float128h__(+__Infinity__)
+ mov rax,__float128l__(-__Infinity__)
+ mov rax,__float128h__(-__Infinity__)
+ mov rax,__float128l__(__NaN__)
+ mov rax,__float128h__(__NaN__)
+ mov rax,__float128l__(__QNaN__)
+ mov rax,__float128h__(__QNaN__)
+ mov rax,__float128l__(__SNaN__)
+ mov rax,__float128h__(__SNaN__)
+
+;
+; Test hexadecimal floating-point numbers
+;
+
+; 16-bit
+ mov ax,__float16__(1.0)
+ mov ax,__float16__(0x1.0)
+ mov ax,__float16__(2.0)
+ mov ax,__float16__(0x2.0)
+ mov ax,__float16__(0x1.0p+1)
+ mov ax,__float16__(0x1.0p-1)
+ mov ax,__float16__(0x0.0)
+ mov ax,__float16__(0x1.23456789)
+ mov ax,__float16__(0x0.123456789)
+ mov ax,__float16__(0x0.0000123456789)
+ mov ax,__float16__(0x1.23456789p10)
+ mov ax,__float16__(0x1.23456789p+10)
+ mov ax,__float16__(0x1.23456789p-10)
+ mov ax,__float16__(0x0.123456789p10)
+ mov ax,__float16__(0x0.123456789p+10)
+ mov ax,__float16__(0x0.123456789abcdef0123456789abcdef012345p-10)
+ mov ax,__float16__(0x0.0000123456789)
+ mov ax,__float16__(0x0.0000123456789p+10)
+ mov ax,__float16__(0x0.0000123456789p-10)
+
+; 32-bit
+ mov eax,__float32__(1.0)
+ mov eax,__float32__(0x1.0)
+ mov eax,__float32__(2.0)
+ mov eax,__float32__(0x2.0)
+ mov eax,__float32__(0x1.0p+1)
+ mov eax,__float32__(0x1.0p-1)
+ mov eax,__float32__(0x0.0)
+ mov eax,__float32__(0x1.23456789)
+ mov eax,__float32__(0x0.123456789)
+ mov eax,__float32__(0x0.0000123456789)
+ mov eax,__float32__(0x1.23456789p10)
+ mov eax,__float32__(0x1.23456789p+10)
+ mov eax,__float32__(0x1.23456789p-10)
+ mov eax,__float32__(0x0.123456789p10)
+ mov eax,__float32__(0x0.123456789p+10)
+ mov eax,__float32__(0x0.123456789abcdef0123456789abcdef012345p-10)
+ mov eax,__float32__(0x0.0000123456789)
+ mov eax,__float32__(0x0.0000123456789p+10)
+ mov eax,__float32__(0x0.0000123456789p-10)
+ mov eax,__float32__(0x123456789.0)
+ mov eax,__float32__(0x0000123456789.0)
+ mov eax,__float32__(0x123456789.0p+0)
+ mov eax,__float32__(0x123456789.0p+64)
+
+; 64-bit
+ mov rax,__float64__(1.0)
+ mov rax,__float64__(0x1.0)
+ mov rax,__float64__(2.0)
+ mov rax,__float64__(0x2.0)
+ mov rax,__float64__(0x1.0p+1)
+ mov rax,__float64__(0x1.0p-1)
+ mov rax,__float64__(0x0.0)
+ mov rax,__float64__(0x1.23456789)
+ mov rax,__float64__(0x0.123456789)
+ mov rax,__float64__(0x0.0000123456789)
+ mov rax,__float64__(0x1.23456789p10)
+ mov rax,__float64__(0x1.23456789p+10)
+ mov rax,__float64__(0x1.23456789p-10)
+ mov rax,__float64__(0x0.123456789p10)
+ mov rax,__float64__(0x0.123456789p+10)
+ mov rax,__float64__(0x0.123456789abcdef0123456789abcdef012345p-10)
+ mov rax,__float64__(0x0.0000123456789)
+ mov rax,__float64__(0x0.0000123456789p+10)
+ mov rax,__float64__(0x0.0000123456789p-10)
+ mov rax,__float64__(0x123456789.0)
+ mov rax,__float64__(0x0000123456789.0)
+ mov rax,__float64__(0x123456789.0p+0)
+ mov rax,__float64__(0x123456789.0p+300)
+
+; 80-bit
+ mov rax,__float80m__(1.0)
+ mov ax,__float80e__(1.0)
+ mov rax,__float80m__(0x1.0)
+ mov ax,__float80e__(0x1.0)
+ mov rax,__float80m__(2.0)
+ mov ax,__float80e__(2.0)
+ mov rax,__float80m__(0x2.0)
+ mov ax,__float80e__(0x2.0)
+ mov rax,__float80m__(0x1.0p+1)
+ mov ax,__float80e__(0x1.0p+1)
+ mov rax,__float80m__(0x1.0p-1)
+ mov ax,__float80e__(0x1.0p-1)
+ mov rax,__float80m__(0x0.0)
+ mov ax,__float80e__(0x0.0)
+ mov rax,__float80m__(0x1.23456789)
+ mov ax,__float80e__(0x1.23456789)
+ mov rax,__float80m__(0x0.123456789)
+ mov ax,__float80e__(0x0.123456789)
+ mov rax,__float80m__(0x0.0000123456789)
+ mov ax,__float80e__(0x0.0000123456789)
+ mov rax,__float80m__(0x1.23456789p10)
+ mov ax,__float80e__(0x1.23456789p10)
+ mov rax,__float80m__(0x1.23456789p+10)
+ mov ax,__float80e__(0x1.23456789p+10)
+ mov rax,__float80m__(0x1.23456789p-10)
+ mov ax,__float80e__(0x1.23456789p-10)
+ mov rax,__float80m__(0x0.123456789p10)
+ mov ax,__float80e__(0x0.123456789p10)
+ mov rax,__float80m__(0x0.123456789p+10)
+ mov ax,__float80e__(0x0.123456789p+10)
+ mov rax,__float80m__(0x0.123456789abcdef0123456789abcdef012345p-10)
+ mov ax,__float80e__(0x0.123456789abcdef0123456789abcdef012345p-10)
+ mov rax,__float80m__(0x0.0000123456789)
+ mov ax,__float80e__(0x0.0000123456789)
+ mov rax,__float80m__(0x0.0000123456789p+10)
+ mov ax,__float80e__(0x0.0000123456789p+10)
+ mov rax,__float80m__(0x0.0000123456789p-10)
+ mov ax,__float80e__(0x0.0000123456789p-10)
+ mov rax,__float80m__(0x123456789.0)
+ mov ax,__float80e__(0x123456789.0)
+ mov rax,__float80m__(0x0000123456789.0)
+ mov ax,__float80e__(0x0000123456789.0)
+ mov rax,__float80m__(0x123456789.0p+0)
+ mov ax,__float80e__(0x123456789.0p+0)
+ mov rax,__float80m__(0x123456789.0p+1024)
+ mov ax,__float80e__(0x123456789.0p+1024)
+
+; 128-bit
+ mov rax,__float128l__(1.0)
+ mov rax,__float128h__(1.0)
+ mov rax,__float128l__(0x1.0)
+ mov rax,__float128h__(0x1.0)
+ mov rax,__float128l__(2.0)
+ mov rax,__float128h__(2.0)
+ mov rax,__float128l__(0x2.0)
+ mov rax,__float128h__(0x2.0)
+ mov rax,__float128l__(0x1.0p+1)
+ mov rax,__float128h__(0x1.0p+1)
+ mov rax,__float128l__(0x1.0p-1)
+ mov rax,__float128h__(0x1.0p-1)
+ mov rax,__float128l__(0x0.0)
+ mov rax,__float128h__(0x0.0)
+ mov rax,__float128l__(0x1.23456789)
+ mov rax,__float128h__(0x1.23456789)
+ mov rax,__float128l__(0x0.123456789)
+ mov rax,__float128h__(0x0.123456789)
+ mov rax,__float128l__(0x0.0000123456789)
+ mov rax,__float128h__(0x0.0000123456789)
+ mov rax,__float128l__(0x1.23456789p10)
+ mov rax,__float128h__(0x1.23456789p10)
+ mov rax,__float128l__(0x1.23456789p+10)
+ mov rax,__float128h__(0x1.23456789p+10)
+ mov rax,__float128l__(0x1.23456789p-10)
+ mov rax,__float128h__(0x1.23456789p-10)
+ mov rax,__float128l__(0x0.123456789p10)
+ mov rax,__float128h__(0x0.123456789p10)
+ mov rax,__float128l__(0x0.123456789p+10)
+ mov rax,__float128h__(0x0.123456789p+10)
+ mov rax,__float128l__(0x0.123456789abcdef0123456789abcdef012345p-10)
+ mov rax,__float128h__(0x0.123456789abcdef0123456789abcdef012345p-10)
+ mov rax,__float128l__(0x0.0000123456789)
+ mov rax,__float128h__(0x0.0000123456789)
+ mov rax,__float128l__(0x0.0000123456789p+10)
+ mov rax,__float128h__(0x0.0000123456789p+10)
+ mov rax,__float128l__(0x0.0000123456789p-10)
+ mov rax,__float128h__(0x0.0000123456789p-10)
+ mov rax,__float128l__(0x123456789.0)
+ mov rax,__float128h__(0x123456789.0)
+ mov rax,__float128l__(0x0000123456789.0)
+ mov rax,__float128h__(0x0000123456789.0)
+ mov rax,__float128l__(0x123456789.0p+0)
+ mov rax,__float128h__(0x123456789.0p+0)
+ mov rax,__float128l__(0x123456789.0p+1024)
+ mov rax,__float128h__(0x123456789.0p+1024)
diff --git a/test/floatize.asm b/test/floatize.asm
new file mode 100644
index 0000000..cc0bbe9
--- /dev/null
+++ b/test/floatize.asm
@@ -0,0 +1,19 @@
+;Testname=unoptimized; Arguments=-O0 -fbin -ofloatize.bin; Files=stdout stderr floatize.bin
+;Testname=optimized; Arguments=-Ox -fbin -ofloatize.bin; Files=stdout stderr floatize.bin
+
+%assign x13 13+26
+%assign f16 __float16__(1.6e-7)
+%assign f32 __float32__(1.6e-7)
+%assign f64 __float64__(1.6e-7)
+%assign f80m __float80m__(1.6e-7)
+%assign f80e __float80e__(1.6e-7)
+%assign f128l __float128l__(1.6e-7)
+%assign f128h __float128h__(1.6e-7)
+
+ dw f16
+ dd f32
+ dq f64
+ dq f80m
+ dw f80e
+ dq f128l
+ dq f128h
diff --git a/test/floattest.asm b/test/floattest.asm
new file mode 100644
index 0000000..3c7ba8b
--- /dev/null
+++ b/test/floattest.asm
@@ -0,0 +1,28 @@
+;Testname=optimized; Arguments=-Ox -felf -ofloattest.o; Files=stdout stderr floattest.o
+
+; nasm -O99 -f elf32 floattest.asm
+; ld -m elf_i386 -o floattest floattest.o -I/lib/ld-linux.so.2 -lc
+
+ global _start
+ extern printf
+
+ section .text
+_start:
+
+ fld qword [num1]
+ fadd qword [num2]
+ sub esp, 8
+ fstp qword [esp]
+ push fmt
+ call printf
+ add esp, 4*3
+
+ mov eax, 1
+ xor ebx, ebx
+ int 80h
+
+ section .data
+num1 dq 41.5
+num2 dq 0.5
+
+fmt db "%f", 10, 0
diff --git a/test/floatx.asm b/test/floatx.asm
new file mode 100644
index 0000000..7368e50
--- /dev/null
+++ b/test/floatx.asm
@@ -0,0 +1,525 @@
+;
+; floatx.asm
+;
+; Test hexadecimal floating-point numbers
+
+%define Inf __Infinity__
+%define NaN __QNaN__
+
+; 16-bit
+ dw 1.0
+ dw 0x1.0
+ dw 2.0
+ dw 0x2.0
+ dw 0x1.0p+1
+ dw 0x1.0p-1
+ dw 0x0.0
+ dw 0x1.23456789
+ dw 0x0.123456789
+ dw 0x0.0000123456789
+ dw 0x1.23456789p10
+ dw 0x1.23456789p+10
+ dw 0x1.23456789p-10
+ dw 0x0.123456789p10
+ dw 0x0.123456789p+10
+ dw 0x0.123456789abcdef0123456789abcdef012345p-10
+ dw 0x0.0000123456789
+ dw 0x0.0000123456789p+10
+ dw 0x0.0000123456789p-10
+ dw 0x1.0p-25 ; Underflow
+ dw 0x1.01p-25 ; Rounds to denorm
+ dw 0x1.0p-24 ; Smallest denorm
+ dw 0x1.ffffffffffffffffffffffffffffp-16 ; Rounds to denorm
+ dw 0x1.0p-15 ; Denorm
+ dw 0x1.ffffffffffffffffffffffffffffp-15 ; Rounds to normal
+ dw 0x1.0p-14 ; Smallest non-denorm
+ dw 0x1.0p+15 ; Biggest possible exponent
+ dw 0x1.ffffffffffffffffffffffffffffp+15 ; Rounds to infinity
+ dw Inf ; Infinity
+ dw NaN
+
+; 32-bit
+ dd 1.0
+ dd 0x1.0
+ dd 2.0
+ dd 0x2.0
+ dd 0x1.0p+1
+ dd 0x1.0p-1
+ dd 0x0.0
+ dd 0x1.23456789
+ dd 0x0.123456789
+ dd 0x0.0000123456789
+ dd 0x1.23456789p10
+ dd 0x1.23456789p+10
+ dd 0x1.23456789p-10
+ dd 0x0.123456789p10
+ dd 0x0.123456789p+10
+ dd 0x0.123456789abcdef0123456789abcdef012345p-10
+ dd 0x0.0000123456789
+ dd 0x0.0000123456789p+10
+ dd 0x0.0000123456789p-10
+ dd 0x123456789.0
+ dd 0x0000123456789.0
+ dd 0x123456789.0p+0
+ dd 0x123456789.0p+64
+ dd 0x1.0p-150 ; Underflow
+ dd 0x1.01p-150 ; Rounds to denorm
+ dd 0x1.0p-149 ; Smallest denorm
+ dd 0x1.ffffffffffffffffffffffffffffp-128 ; Rounds to denorm
+ dd 0x1.0p-127 ; Denorm
+ dd 0x1.ffffffffffffffffffffffffffffp-127 ; Rounds to normal
+ dd 0x1.0p-126 ; Smallest non-denorm
+ dd 0x1.0p+127 ; Biggest possible exponent
+ dd 0x1.ffffffffffffffffffffffffffffp+127 ; Rounds to infinity
+ dd Inf ; Infinity
+ dd NaN
+
+; 64-bit
+ dq 1.0
+ dq 0x1.0
+ dq 2.0
+ dq 0x2.0
+ dq 0x1.0p+1
+ dq 0x1.0p-1
+ dq 0x0.0
+ dq 0x1.23456789
+ dq 0x0.123456789
+ dq 0x0.0000123456789
+ dq 0x1.23456789p10
+ dq 0x1.23456789p+10
+ dq 0x1.23456789p-10
+ dq 0x0.123456789p10
+ dq 0x0.123456789p+10
+ dq 0x0.123456789abcdef0123456789abcdef012345p-10
+ dq 0x0.0000123456789
+ dq 0x0.0000123456789p+10
+ dq 0x0.0000123456789p-10
+ dq 0x123456789.0
+ dq 0x0000123456789.0
+ dq 0x123456789.0p+0
+ dq 0x123456789.0p+300
+ dq 0x1.0p-1075 ; Underflow
+ dq 0x1.01p-1075 ; Rounds to denorm
+ dq 0x1.0p-1074 ; Smallest denorm
+ dq 0x1.ffffffffffffffffffffffffffffp-1024 ; Rounds to denorm
+ dq 0x1.0p-1023 ; Denorm
+ dq 0x1.ffffffffffffffffffffffffffffp-1023 ; Rounds to normal
+ dq 0x1.0p-1022 ; Smallest non-denorm
+ dq 0x1.0p+1023 ; Biggest possible exponent
+ dq 0x1.ffffffffffffffffffffffffffffp+1023 ; Rounds to infinity
+ dq Inf ; Infinity
+ dq NaN
+
+; 80-bit
+ dt 1.0
+ dt 0x1.0
+ dt 2.0
+ dt 0x2.0
+ dt 0x1.0p+1
+ dt 0x1.0p-1
+ dt 0x0.0
+ dt 0x1.23456789
+ dt 0x0.123456789
+ dt 0x0.0000123456789
+ dt 0x1.23456789p10
+ dt 0x1.23456789p+10
+ dt 0x1.23456789p-10
+ dt 0x0.123456789p10
+ dt 0x0.123456789p+10
+ dt 0x0.123456789abcdef0123456789abcdef012345p-10
+ dt 0x0.0000123456789
+ dt 0x0.0000123456789p+10
+ dt 0x0.0000123456789p-10
+ dt 0x123456789.0
+ dt 0x0000123456789.0
+ dt 0x123456789.0p+0
+ dt 0x123456789.0p+1024
+ dt 0x1.0p-16446 ; Underflow
+ dt 0x1.01p-16446 ; Rounds to denorm
+ dt 0x1.0p-16445 ; Smallest denorm
+ dt 0x1.ffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
+ dt 0x1.0p-16383 ; Denorm
+ dt 0x1.ffffffffffffffffffffffffffffp-16383 ; Rounds to normal
+ dt 0x1.0p-16382 ; Smallest non-denorm
+ dt 0x1.0p+16383 ; Biggest possible exponent
+ dt 0x1.ffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
+ dt Inf ; Infinity
+ dt NaN
+
+; 128-bit
+ do 1.0
+ do 0x1.0
+ do 2.0
+ do 0x2.0
+ do 0x1.0p+1
+ do 0x1.0p-1
+ do 0x0.0
+ do 0x1.23456789
+ do 0x0.123456789
+ do 0x0.0000123456789
+ do 0x1.23456789p10
+ do 0x1.23456789p+10
+ do 0x1.23456789p-10
+ do 0x0.123456789p10
+ do 0x0.123456789p+10
+ do 0x0.123456789abcdef0123456789abcdef012345p-10
+ do 0x0.0000123456789
+ do 0x0.0000123456789p+10
+ do 0x0.0000123456789p-10
+ do 0x123456789.0
+ do 0x0000123456789.0
+ do 0x123456789.0p+0
+ do 0x123456789.0p+1024
+ do 0x1.0p-16495 ; Underflow
+ do 0x1.01p-16495 ; Rounds to denorm
+ do 0x1.0p-16494 ; Smallest denorm
+ do 0x1.ffffffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
+ do 0x1.0p-16383 ; Denorm
+ do 0x1.ffffffffffffffffffffffffffffffffp-16383 ; Rounds to normal
+ do 0x1.0p-16382 ; Smallest non-denorm
+ do 0x1.0p+16383 ; Biggest possible exponent
+ do 0x1.ffffffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
+ do Inf ; Infinity
+ do NaN
+
+; 16-bit
+ dw 1.0
+ dw 0h1.0
+ dw 2.0
+ dw 0h2.0
+ dw 0h1.0p+1
+ dw 0h1.0p-1
+ dw 0h0.0
+ dw 0h1.23456789
+ dw 0h0.123456789
+ dw 0h0.0000123456789
+ dw 0h1.23456789p10
+ dw 0h1.23456789p+10
+ dw 0h1.23456789p-10
+ dw 0h0.123456789p10
+ dw 0h0.123456789p+10
+ dw 0h0.123456789abcdef0123456789abcdef012345p-10
+ dw 0h0.0000123456789
+ dw 0h0.0000123456789p+10
+ dw 0h0.0000123456789p-10
+ dw 0h1.0p-25 ; Underflow
+ dw 0h1.0p-24 ; Smallest denorm
+ dw 0h1.ffffffffffffffffffffffffffffp-16 ; Rounds to denorm
+ dw 0h1.0p-15 ; Denorm
+ dw 0h1.ffffffffffffffffffffffffffffp-15 ; Rounds to normal
+ dw 0h1.0p-14 ; Smallest non-denorm
+ dw 0h1.0p+15 ; Biggest possible exponent
+ dw 0h1.ffffffffffffffffffffffffffffp+15 ; Rounds to infinity
+ dw Inf ; Infinity
+ dw NaN
+
+; 32-bit
+ dd 1.0
+ dd 0h1.0
+ dd 2.0
+ dd 0h2.0
+ dd 0h1.0p+1
+ dd 0h1.0p-1
+ dd 0h0.0
+ dd 0h1.23456789
+ dd 0h0.123456789
+ dd 0h0.0000123456789
+ dd 0h1.23456789p10
+ dd 0h1.23456789p+10
+ dd 0h1.23456789p-10
+ dd 0h0.123456789p10
+ dd 0h0.123456789p+10
+ dd 0h0.123456789abcdef0123456789abcdef012345p-10
+ dd 0h0.0000123456789
+ dd 0h0.0000123456789p+10
+ dd 0h0.0000123456789p-10
+ dd 0h123456789.0
+ dd 0h0000123456789.0
+ dd 0h123456789.0p+0
+ dd 0h123456789.0p+64
+ dd 0h1.0p-150 ; Underflow
+ dd 0h1.0p-149 ; Smallest denorm
+ dd 0h1.ffffffffffffffffffffffffffffp-128 ; Rounds to denorm
+ dd 0h1.0p-127 ; Denorm
+ dd 0h1.ffffffffffffffffffffffffffffp-127 ; Rounds to normal
+ dd 0h1.0p-126 ; Smallest non-denorm
+ dd 0h1.0p+127 ; Biggest possible exponent
+ dd 0h1.ffffffffffffffffffffffffffffp+127 ; Rounds to infinity
+ dd Inf ; Infinity
+ dd NaN
+
+; 64-bit
+ dq 1.0
+ dq 0h1.0
+ dq 2.0
+ dq 0h2.0
+ dq 0h1.0p+1
+ dq 0h1.0p-1
+ dq 0h0.0
+ dq 0h1.23456789
+ dq 0h0.123456789
+ dq 0h0.0000123456789
+ dq 0h1.23456789p10
+ dq 0h1.23456789p+10
+ dq 0h1.23456789p-10
+ dq 0h0.123456789p10
+ dq 0h0.123456789p+10
+ dq 0h0.123456789abcdef0123456789abcdef012345p-10
+ dq 0h0.0000123456789
+ dq 0h0.0000123456789p+10
+ dq 0h0.0000123456789p-10
+ dq 0h123456789.0
+ dq 0h0000123456789.0
+ dq 0h123456789.0p+0
+ dq 0h123456789.0p+300
+ dq 0h1.0p-1075 ; Underflow
+ dq 0h1.0p-1074 ; Smallest denorm
+ dq 0h1.ffffffffffffffffffffffffffffp-1024 ; Rounds to denorm
+ dq 0h1.0p-1023 ; Denorm
+ dq 0h1.ffffffffffffffffffffffffffffp-1023 ; Rounds to normal
+ dq 0h1.0p-1022 ; Smallest non-denorm
+ dq 0h1.0p+1023 ; Biggest possible exponent
+ dq 0h1.ffffffffffffffffffffffffffffp+1023 ; Rounds to infinity
+ dq Inf ; Infinity
+ dq NaN
+
+; 80-bit
+ dt 1.0
+ dt 0h1.0
+ dt 2.0
+ dt 0h2.0
+ dt 0h1.0p+1
+ dt 0h1.0p-1
+ dt 0h0.0
+ dt 0h1.23456789
+ dt 0h0.123456789
+ dt 0h0.0000123456789
+ dt 0h1.23456789p10
+ dt 0h1.23456789p+10
+ dt 0h1.23456789p-10
+ dt 0h0.123456789p10
+ dt 0h0.123456789p+10
+ dt 0h0.123456789abcdef0123456789abcdef012345p-10
+ dt 0h0.0000123456789
+ dt 0h0.0000123456789p+10
+ dt 0h0.0000123456789p-10
+ dt 0h123456789.0
+ dt 0h0000123456789.0
+ dt 0h123456789.0p+0
+ dt 0h123456789.0p+1024
+ dt 0h1.0p-16446 ; Underflow
+ dt 0h1.0p-16445 ; Smallest denorm
+ dt 0h1.ffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
+ dt 0h1.0p-16383 ; Denorm
+ dt 0h1.ffffffffffffffffffffffffffffp-16383 ; Rounds to normal
+ dt 0h1.0p-16382 ; Smallest non-denorm
+ dt 0h1.0p+16383 ; Biggest possible exponent
+ dt 0h1.ffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
+ dt Inf ; Infinity
+ dt NaN
+
+; 128-bit
+ do 1.0
+ do 0h1.0
+ do 2.0
+ do 0h2.0
+ do 0h1.0p+1
+ do 0h1.0p-1
+ do 0h0.0
+ do 0h1.23456789
+ do 0h0.123456789
+ do 0h0.0000123456789
+ do 0h1.23456789p10
+ do 0h1.23456789p+10
+ do 0h1.23456789p-10
+ do 0h0.123456789p10
+ do 0h0.123456789p+10
+ do 0h0.123456789abcdef0123456789abcdef012345p-10
+ do 0h0.0000123456789
+ do 0h0.0000123456789p+10
+ do 0h0.0000123456789p-10
+ do 0h123456789.0
+ do 0h0000123456789.0
+ do 0h123456789.0p+0
+ do 0h123456789.0p+1024
+ do 0h1.0p-16495 ; Underflow
+ do 0h1.0p-16494 ; Smallest denorm
+ do 0h1.ffffffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
+ do 0h1.0p-16383 ; Denorm
+ do 0h1.ffffffffffffffffffffffffffffffffp-16383 ; Rounds to normal
+ do 0h1.0p-16382 ; Smallest non-denorm
+ do 0h1.0p+16383 ; Biggest possible exponent
+ do 0h1.ffffffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
+ do Inf ; Infinity
+ do NaN
+
+; 16-bit
+ dw 1.0
+ dw $1.0
+ dw 2.0
+ dw $2.0
+ dw $1.0p+1
+ dw $1.0p-1
+ dw $0.0
+ dw $1.23456789
+ dw $0.123456789
+ dw $0.0000123456789
+ dw $1.23456789p10
+ dw $1.23456789p+10
+ dw $1.23456789p-10
+ dw $0.123456789p10
+ dw $0.123456789p+10
+ dw $0.123456789abcdef0123456789abcdef012345p-10
+ dw $0.0000123456789
+ dw $0.0000123456789p+10
+ dw $0.0000123456789p-10
+ dw $1.0p-25 ; Underflow
+ dw $1.0p-24 ; Smallest denorm
+ dw $1.ffffffffffffffffffffffffffffp-16 ; Rounds to denorm
+ dw $1.0p-15 ; Denorm
+ dw $1.ffffffffffffffffffffffffffffp-15 ; Rounds to normal
+ dw $1.0p-14 ; Smallest non-denorm
+ dw $1.0p+15 ; Biggest possible exponent
+ dw $1.ffffffffffffffffffffffffffffp+15 ; Rounds to infinity
+ dw Inf ; Infinity
+ dw NaN
+
+; 32-bit
+ dd 1.0
+ dd $1.0
+ dd 2.0
+ dd $2.0
+ dd $1.0p+1
+ dd $1.0p-1
+ dd $0.0
+ dd $1.23456789
+ dd $0.123456789
+ dd $0.0000123456789
+ dd $1.23456789p10
+ dd $1.23456789p+10
+ dd $1.23456789p-10
+ dd $0.123456789p10
+ dd $0.123456789p+10
+ dd $0.123456789abcdef0123456789abcdef012345p-10
+ dd $0.0000123456789
+ dd $0.0000123456789p+10
+ dd $0.0000123456789p-10
+ dd $123456789.0
+ dd $0000123456789.0
+ dd $123456789.0p+0
+ dd $123456789.0p+64
+ dd $1.0p-150 ; Underflow
+ dd $1.0p-149 ; Smallest denorm
+ dd $1.ffffffffffffffffffffffffffffp-128 ; Rounds to denorm
+ dd $1.0p-127 ; Denorm
+ dd $1.ffffffffffffffffffffffffffffp-127 ; Rounds to normal
+ dd $1.0p-126 ; Smallest non-denorm
+ dd $1.0p+127 ; Biggest possible exponent
+ dd $1.ffffffffffffffffffffffffffffp+127 ; Rounds to infinity
+ dd Inf ; Infinity
+ dd NaN
+
+; 64-bit
+ dq 1.0
+ dq $1.0
+ dq 2.0
+ dq $2.0
+ dq $1.0p+1
+ dq $1.0p-1
+ dq $0.0
+ dq $1.23456789
+ dq $0.123456789
+ dq $0.0000123456789
+ dq $1.23456789p10
+ dq $1.23456789p+10
+ dq $1.23456789p-10
+ dq $0.123456789p10
+ dq $0.123456789p+10
+ dq $0.123456789abcdef0123456789abcdef012345p-10
+ dq $0.0000123456789
+ dq $0.0000123456789p+10
+ dq $0.0000123456789p-10
+ dq $123456789.0
+ dq $0000123456789.0
+ dq $123456789.0p+0
+ dq $123456789.0p+300
+ dq $1.0p-1075 ; Underflow
+ dq $1.0p-1074 ; Smallest denorm
+ dq $1.ffffffffffffffffffffffffffffp-1024 ; Rounds to denorm
+ dq $1.0p-1023 ; Denorm
+ dq $1.ffffffffffffffffffffffffffffp-1023 ; Rounds to normal
+ dq $1.0p-1022 ; Smallest non-denorm
+ dq $1.0p+1023 ; Biggest possible exponent
+ dq $1.ffffffffffffffffffffffffffffp+1023 ; Rounds to infinity
+ dq Inf ; Infinity
+ dq NaN
+
+; 80-bit
+ dt 1.0
+ dt $1.0
+ dt 2.0
+ dt $2.0
+ dt $1.0p+1
+ dt $1.0p-1
+ dt $0.0
+ dt $1.23456789
+ dt $0.123456789
+ dt $0.0000123456789
+ dt $1.23456789p10
+ dt $1.23456789p+10
+ dt $1.23456789p-10
+ dt $0.123456789p10
+ dt $0.123456789p+10
+ dt $0.123456789abcdef0123456789abcdef012345p-10
+ dt $0.0000123456789
+ dt $0.0000123456789p+10
+ dt $0.0000123456789p-10
+ dt $123456789.0
+ dt $0000123456789.0
+ dt $123456789.0p+0
+ dt $123456789.0p+1024
+ dt $1.0p-16446 ; Underflow
+ dt $1.0p-16445 ; Smallest denorm
+ dt $1.ffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
+ dt $1.0p-16383 ; Denorm
+ dt $1.ffffffffffffffffffffffffffffp-16383 ; Rounds to normal
+ dt $1.0p-16382 ; Smallest non-denorm
+ dt $1.0p+16383 ; Biggest possible exponent
+ dt $1.ffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
+ dt Inf ; Infinity
+ dt NaN
+
+; 128-bit
+ do 1.0
+ do $1.0
+ do 2.0
+ do $2.0
+ do $1.0p+1
+ do $1.0p-1
+ do $0.0
+ do $1.23456789
+ do $0.123456789
+ do $0.0000123456789
+ do $1.23456789p10
+ do $1.23456789p+10
+ do $1.23456789p-10
+ do $0.123456789p10
+ do $0.123456789p+10
+ do $0.123456789abcdef0123456789abcdef012345p-10
+ do $0.0000123456789
+ do $0.0000123456789p+10
+ do $0.0000123456789p-10
+ do $123456789.0
+ do $0000123456789.0
+ do $123456789.0p+0
+ do $123456789.0p+1024
+ do $1.0p-16495 ; Underflow
+ do $1.0p-16494 ; Smallest denorm
+ do $1.ffffffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
+ do $1.0p-16383 ; Denorm
+ do $1.ffffffffffffffffffffffffffffffffp-16383 ; Rounds to normal
+ do $1.0p-16382 ; Smallest non-denorm
+ do $1.0p+16383 ; Biggest possible exponent
+ do $1.ffffffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
+ do Inf ; Infinity
+ do NaN
diff --git a/test/fpu.asm b/test/fpu.asm
new file mode 100644
index 0000000..4051fdd
--- /dev/null
+++ b/test/fpu.asm
@@ -0,0 +1,127 @@
+;Testname=test; Arguments=-fbin -ofpu.bin; Files=stdout stderr fpu.bin
+
+; relaxed encodings for FPU instructions, which NASM should support
+; -----------------------------------------------------------------
+
+%define void
+%define reg_fpu0 st0
+%define reg_fpu st1
+
+; no operands instead of one operand:
+
+ ; F(U)COM(P), FCOM2, FCOMP3, FCOMP5
+
+ FCOM void
+ FCOMP void
+ FUCOM void
+ FUCOMP void
+; FCOM2 void
+; FCOMP3 void
+; FCOMP5 void
+
+ ; FLD, FST, FSTP, FSTP1, FSTP8, FSTP9
+
+ FLD void
+ FST void
+ FSTP void
+; FSTP1 void
+; FSTP8 void
+; FSTP9 void
+
+ ; FXCH, FXCH4, FXCH7, FFREE, FFREEP
+
+ FXCH void
+; FXCH4 void
+; FXCH7 void
+ FFREE void
+ FFREEP void
+
+; no operands instead of two operands:
+
+ ; FADD(P), FMUL(P), FSUBR(P), FSUB(P), FDIVR(P), FDIV(P)
+
+ FADD void
+ FADDP void
+ FMUL void
+ FMULP void
+ FSUBR void
+ FSUBRP void
+ FSUB void
+ FSUBP void
+ FDIVR void
+ FDIVRP void
+ FDIV void
+ FDIVP void
+
+; one operand instead of two operands:
+
+ ; FADD, FMUL, FSUB, FSUBR, FDIV, FDIVR
+
+ FADD reg_fpu
+ FMUL reg_fpu
+ FSUB reg_fpu
+ FSUBR reg_fpu
+ FDIV reg_fpu
+ FDIVR reg_fpu
+
+ ; FADD, FMUL, FSUBR, FSUB, FDIVR, FDIV (with TO qualifier)
+
+ FADD to reg_fpu
+ FMUL to reg_fpu
+ FSUBR to reg_fpu
+ FSUB to reg_fpu
+ FDIVR to reg_fpu
+ FDIV to reg_fpu
+
+ ; FADDP, FMULP, FSUBRP, FSUBP, FDIVRP, FDIVP
+
+ FADDP reg_fpu
+ FMULP reg_fpu
+ FSUBRP reg_fpu
+ FSUBP reg_fpu
+ FDIVRP reg_fpu
+ FDIVP reg_fpu
+
+ ; FCMOV(N)B, FCMOV(N)E, FCMOV(N)BE, FCMOV(N)U, and F(U)COMI(P)
+
+ FCMOVB reg_fpu
+ FCMOVNB reg_fpu
+ FCMOVE reg_fpu
+ FCMOVNE reg_fpu
+ FCMOVBE reg_fpu
+ FCMOVNBE reg_fpu
+ FCMOVU reg_fpu
+ FCMOVNU reg_fpu
+ FCOMI reg_fpu
+ FCOMIP reg_fpu
+ FUCOMI reg_fpu
+ FUCOMIP reg_fpu
+
+; two operands instead of one operand:
+
+ ; these don't really exist, and thus are _NOT_ supported:
+
+; FCOM reg_fpu,reg_fpu0
+; FCOM reg_fpu0,reg_fpu
+; FUCOM reg_fpu,reg_fpu0
+; FUCOM reg_fpu0,reg_fpu
+; FCOMP reg_fpu,reg_fpu0
+; FCOMP reg_fpu0,reg_fpu
+; FUCOMP reg_fpu,reg_fpu0
+; FUCOMP reg_fpu0,reg_fpu
+
+; FCOM2 reg_fpu,reg_fpu0
+; FCOM2 reg_fpu0,reg_fpu
+; FCOMP3 reg_fpu,reg_fpu0
+; FCOMP3 reg_fpu0,reg_fpu
+; FCOMP5 reg_fpu,reg_fpu0
+; FCOMP5 reg_fpu0,reg_fpu
+
+; FXCH reg_fpu,reg_fpu0
+; FXCH reg_fpu0,reg_fpu
+; FXCH4 reg_fpu,reg_fpu0
+; FXCH4 reg_fpu0,reg_fpu
+; FXCH7 reg_fpu,reg_fpu0
+; FXCH7 reg_fpu0,reg_fpu
+
+; EOF
diff --git a/test/fwdopt.asm b/test/fwdopt.asm
new file mode 100644
index 0000000..48dbc3f
--- /dev/null
+++ b/test/fwdopt.asm
@@ -0,0 +1,133 @@
+;Testname=test; Arguments=-fbin -ofwdopt.bin; Files=stdout stderr fwdopt.bin
+n0: jmp n1
+n1: jmp n2
+n2: jmp n3
+n3: jmp n4
+n4: jmp n5
+n5: jmp n6
+n6: jmp n7
+n7: jmp n8
+n8: jmp n9
+n9: jmp n10
+n10: jmp n11
+n11: jmp n12
+n12: jmp n13
+n13: jmp n14
+n14: jmp n15
+n15: jmp n16
+n16: jmp n17
+n17: jmp n18
+n18: jmp n19
+n19: jmp n20
+n20: jmp n21
+n21: jmp n22
+n22: jmp n23
+n23: jmp n24
+n24: jmp n25
+n25: jmp n26
+n26: jmp n27
+n27: jmp n28
+n28: jmp n29
+n29: jmp n30
+n30: jmp n31
+n31: jmp n32
+n32: jmp n33
+n33: jmp n34
+n34: jmp n35
+n35: jmp n36
+n36: jmp n37
+n37: jmp n38
+n38: jmp n39
+n39: jmp n40
+n40: jmp n41
+n41: jmp n42
+n42: jmp n43
+n43: jmp n44
+n44: jmp n45
+n45: jmp n46
+n46: jmp n47
+n47: jmp n48
+n48: jmp n49
+n49: jmp n50
+n50: jmp n51
+n51: jmp n52
+n52: jmp n53
+n53: jmp n54
+n54: jmp n55
+n55: jmp n56
+n56: jmp n57
+n57: jmp n58
+n58: jmp n59
+n59: jmp n60
+n60: jmp n61
+n61: jmp n62
+n62: jmp n63
+n63: jmp n64
+n64: jmp n65
+n65: jmp n66
+n66: jmp n67
+n67: jmp n68
+n68: jmp n69
+n69: jmp n70
+n70: jmp n71
+n71: jmp n72
+n72: jmp n73
+n73: jmp n74
+n74: jmp n75
+n75: jmp n76
+n76: jmp n77
+n77: jmp n78
+n78: jmp n79
+n79: jmp n80
+n80: jmp n81
+n81: jmp n82
+n82: jmp n83
+n83: jmp n84
+n84: jmp n85
+n85: jmp n86
+n86: jmp n87
+n87: jmp n88
+n88: jmp n89
+n89: jmp n90
+n90: jmp n91
+n91: jmp n92
+n92: jmp n93
+n93: jmp n94
+n94: jmp n95
+n95: jmp n96
+n96: jmp n97
+n97: jmp n98
+n98: jmp n99
+n99: jmp n100
+n100: jmp n101
+n101: jmp n102
+n102: jmp n103
+n103: jmp n104
+n104: jmp n105
+n105: jmp n106
+n106: jmp n107
+n107: jmp n108
+n108: jmp n109
+n109: jmp n110
+n110: jmp n111
+n111: jmp n112
+n112: jmp n113
+n113: jmp n114
+n114: jmp n115
+n115: jmp n116
+n116: jmp n117
+n117: jmp n118
+n118: jmp n119
+n119: jmp n120
+n120: jmp n121
+n121: jmp n122
+n122: jmp n123
+n123: jmp n124
+n124: jmp n125
+n125: jmp n126
+n126: jmp n127
+n127: jmp n0
+
+ ;; This should emit exactly 3 NOP bytes
+ times 260-($-$$) nop
+ hlt
diff --git a/test/fwdoptpp.asm b/test/fwdoptpp.asm
new file mode 100644
index 0000000..e1f5dd6
--- /dev/null
+++ b/test/fwdoptpp.asm
@@ -0,0 +1,150 @@
+;Testname=error; Arguments=-fbin -DERROR -ofwdoptpp.bin; Files=stdout stderr fwdoptpp.bin
+;Testname=fatal; Arguments=-fbin -DFATAL -ofwdoptpp.bin; Files=stdout stderr fwdoptpp.bin
+;Testname=warning; Arguments=-fbin -DWARNING -ofwdoptpp.bin; Files=stdout stderr fwdoptpp.bin
+
+%ifndef ERROR
+ %ifndef FATAL
+ %ifndef WARNING
+ %define ERROR 1
+ %endif
+ %endif
+%endif
+
+n0: jmp n1
+n1: jmp n2
+n2: jmp n3
+n3: jmp n4
+n4: jmp n5
+n5: jmp n6
+n6: jmp n7
+n7: jmp n8
+n8: jmp n9
+n9: jmp n10
+n10: jmp n11
+n11: jmp n12
+n12: jmp n13
+n13: jmp n14
+n14: jmp n15
+n15: jmp n16
+n16: jmp n17
+n17: jmp n18
+n18: jmp n19
+n19: jmp n20
+n20: jmp n21
+n21: jmp n22
+n22: jmp n23
+n23: jmp n24
+n24: jmp n25
+n25: jmp n26
+n26: jmp n27
+n27: jmp n28
+n28: jmp n29
+n29: jmp n30
+n30: jmp n31
+n31: jmp n32
+n32: jmp n33
+n33: jmp n34
+n34: jmp n35
+n35: jmp n36
+n36: jmp n37
+n37: jmp n38
+n38: jmp n39
+n39: jmp n40
+n40: jmp n41
+n41: jmp n42
+n42: jmp n43
+n43: jmp n44
+n44: jmp n45
+n45: jmp n46
+n46: jmp n47
+n47: jmp n48
+n48: jmp n49
+n49: jmp n50
+n50: jmp n51
+n51: jmp n52
+n52: jmp n53
+n53: jmp n54
+n54: jmp n55
+n55: jmp n56
+n56: jmp n57
+n57: jmp n58
+n58: jmp n59
+n59: jmp n60
+n60: jmp n61
+n61: jmp n62
+n62: jmp n63
+n63: jmp n64
+n64: jmp n65
+n65: jmp n66
+n66: jmp n67
+n67: jmp n68
+n68: jmp n69
+n69: jmp n70
+n70: jmp n71
+n71: jmp n72
+n72: jmp n73
+n73: jmp n74
+n74: jmp n75
+n75: jmp n76
+n76: jmp n77
+n77: jmp n78
+n78: jmp n79
+n79: jmp n80
+n80: jmp n81
+n81: jmp n82
+n82: jmp n83
+n83: jmp n84
+n84: jmp n85
+n85: jmp n86
+n86: jmp n87
+n87: jmp n88
+n88: jmp n89
+n89: jmp n90
+n90: jmp n91
+n91: jmp n92
+n92: jmp n93
+n93: jmp n94
+n94: jmp n95
+n95: jmp n96
+n96: jmp n97
+n97: jmp n98
+n98: jmp n99
+n99: jmp n100
+n100: jmp n101
+n101: jmp n102
+n102: jmp n103
+n103: jmp n104
+n104: jmp n105
+n105: jmp n106
+n106: jmp n107
+n107: jmp n108
+n108: jmp n109
+n109: jmp n110
+n110: jmp n111
+n111: jmp n112
+n112: jmp n113
+n113: jmp n114
+n114: jmp n115
+n115: jmp n116
+n116: jmp n117
+n117: jmp n118
+n118: jmp n119
+n119: jmp n120
+n120: jmp n121
+n121: jmp n122
+n122: jmp n123
+n123: jmp n124
+n124: jmp n125
+n125: jmp n126
+n126: jmp n127
+n127: jmp n0
+
+%if ($-$$) > 257
+ %ifdef FATAL
+ %fatal "Out of space!"
+ %elifdef ERROR
+ %error "Out of space!"
+ %elifdef WARNING
+ %warning "Out of space!"
+ %endif
+%endif
diff --git a/test/gotoff64.asm b/test/gotoff64.asm
new file mode 100644
index 0000000..05f5882
--- /dev/null
+++ b/test/gotoff64.asm
@@ -0,0 +1,25 @@
+;Testname=noerr; Arguments=-felf64 -ogotoff64.o; Files=stdout stderr gotoff64.o
+;Testname=err; Arguments=-DERROR -felf64 -ogotoff64.o; Files=stdout stderr gotoff64.o
+
+ bits 64
+ default rel
+
+ extern foo
+
+ mov r15,[foo wrt ..got]
+ lea r12,[foo wrt ..got]
+%ifdef ERROR
+ lea rax,[foo wrt ..gotoff]
+ mov rax,[foo wrt ..gotoff]
+%endif
+
+ default abs
+
+ mov r15,[foo wrt ..got]
+ lea r12,[foo wrt ..got]
+ mov rax,[qword foo wrt ..got]
+%ifdef ERROR
+ lea rax,[foo wrt ..gotoff]
+ mov rax,[foo wrt ..gotoff]
+%endif
+ mov rax,[qword foo wrt ..gotoff]
diff --git a/test/ifelse.asm b/test/ifelse.asm
new file mode 100644
index 0000000..bbb0d79
--- /dev/null
+++ b/test/ifelse.asm
@@ -0,0 +1,46 @@
+;Testname=ifelse; Arguments=-fbin -oifelse.bin; Files=stdout stderr ifelse.bin
+
+;No problems -> db 3
+%if 0
+ db 0
+%elif 0 > 0
+ db 1
+%elif 1 < 1
+ db 2
+%else
+ db 3
+%endif
+
+;Garbage after else, elif after else -> db 5
+%if 0
+ db 4
+%else trailing garbage
+ db 5
+%elif 1
+ db 6
+%endif
+
+;Garbage after endif ->
+%if 0
+ db 7
+%endif trailing garbage
+
+;else after else -> db 9
+%if 0
+ db 8
+%else
+ db 9
+%else
+ db 10
+%endif
+
+;Problem preprocessed out, no warning ->
+%if 0
+ %if 1
+ db 11
+ %else
+ db 12
+ %else
+ db 13
+ %endif
+%endif
diff --git a/test/ifmacro.asm b/test/ifmacro.asm
new file mode 100644
index 0000000..53f3d29
--- /dev/null
+++ b/test/ifmacro.asm
@@ -0,0 +1,413 @@
+;Testname=test; Arguments=-fbin -oifmacro.txt; Files=stdout stderr ifmacro.txt
+
+;
+; ifmacro.asm
+;
+; Test of the new ifmacro directive
+;
+; This file produces a human-readable text file when compiled
+; with -f bin
+;
+
+%define LF 10
+
+%macro dummy 2
+ db 'This is a dummy macro, '
+ db 'arg1 = ', %1, ', '
+ db 'arg2 = ', %2, LF
+%endmacro
+
+ dummy 'this', 'that'
+
+%ifdef CR
+ db '%ifdef CR', LF
+%endif
+
+%ifdef LF
+ db '%ifdef LF', LF
+%endif
+
+%ifmacro dummy 1
+ db '%ifmacro dummy 1', LF
+%endif
+
+%ifmacro dummy 2
+ db '%ifmacro dummy 2', LF
+%endif
+
+%ifmacro dummy 3
+ db '%ifmacro dummy 3', LF
+%endif
+
+%ifmacro dummy 1+
+ db '%ifmacro dummy 1+', LF
+%endif
+
+%ifmacro dummy 2+
+ db '%ifmacro dummy 2+', LF
+%endif
+
+%ifmacro dummy 3+
+ db '%ifmacro dummy 3+', LF
+%endif
+
+%ifmacro dummy
+ db '%ifmacro dummy', LF
+%endif
+
+%ifmacro dummy 0-1
+ db '%ifmacro dummy 0-1', LF
+%endif
+
+%ifmacro dummy 1-2
+ db '%ifmacro dummy 1-2', LF
+%endif
+
+%ifmacro dummy 2-3
+ db '%ifmacro dummy 2-3', LF
+%endif
+
+%ifmacro dummy 3-4
+ db '%ifmacro dummy 3-4', LF
+%endif
+
+%ifmacro LF
+ db '%ifmacro LF', LF
+%endif
+
+%ifndef CR
+ db '%ifndef CR', LF
+%endif
+
+%ifndef LF
+ db '%ifndef LF', LF
+%endif
+
+%ifnmacro dummy 1
+ db '%ifnmacro dummy 1', LF
+%endif
+
+%ifnmacro dummy 2
+ db '%ifnmacro dummy 2', LF
+%endif
+
+%ifnmacro dummy 3
+ db '%ifnmacro dummy 3', LF
+%endif
+
+%ifnmacro dummy 1+
+ db '%ifnmacro dummy 1+', LF
+%endif
+
+%ifnmacro dummy 2+
+ db '%ifnmacro dummy 2+', LF
+%endif
+
+%ifnmacro dummy 3+
+ db '%ifnmacro dummy 3+', LF
+%endif
+
+%ifnmacro dummy
+ db '%ifnmacro dummy', LF
+%endif
+
+%ifnmacro dummy 0-1
+ db '%ifnmacro dummy 0-1', LF
+%endif
+
+%ifnmacro dummy 1-2
+ db '%ifnmacro dummy 1-2', LF
+%endif
+
+%ifnmacro dummy 2-3
+ db '%ifnmacro dummy 2-3', LF
+%endif
+
+%ifnmacro dummy 3-4
+ db '%ifnmacro dummy 3-4', LF
+%endif
+
+%ifnmacro LF
+ db '%ifnmacro LF', LF
+%endif
+
+%if 0
+%elifdef CR
+ db '%elifdef CR', CR
+%endif
+
+%if 0
+%elifdef LF
+ db '%elifdef LF', LF
+%endif
+
+%if 0
+%elifmacro dummy 1
+ db '%elifmacro dummy 1', LF
+%endif
+
+%if 0
+%elifmacro dummy 2
+ db '%elifmacro dummy 2', LF
+%endif
+
+%if 0
+%elifmacro dummy 3
+ db '%elifmacro dummy 3', LF
+%endif
+
+%if 0
+%elifmacro dummy 1+
+ db '%elifmacro dummy 1+', LF
+%endif
+
+%if 0
+%elifmacro dummy 2+
+ db '%elifmacro dummy 2+', LF
+%endif
+
+%if 0
+%elifmacro dummy 3+
+ db '%elifmacro dummy 3+', LF
+%endif
+
+%if 0
+%elifmacro dummy
+ db '%elifmacro dummy', LF
+%endif
+
+%if 0
+%elifmacro dummy 0-1
+ db '%elifmacro dummy 0-1', LF
+%endif
+
+%if 0
+%elifmacro dummy 1-2
+ db '%elifmacro dummy 1-2', LF
+%endif
+
+%if 0
+%elifmacro dummy 2-3
+ db '%elifmacro dummy 2-3', LF
+%endif
+
+%if 0
+%elifmacro dummy 3-4
+ db '%elifmacro dummy 3-4', LF
+%endif
+
+%if 0
+%elifmacro LF
+ db '%elifmacro LF', LF
+%endif
+
+%if 0
+%elifndef CR
+ db '%elifndef CR', LF
+%endif
+
+%if 0
+%elifndef LF
+ db '%elifndef LF', LF
+%endif
+
+%if 0
+%elifnmacro dummy 1
+ db '%elifnmacro dummy 1', LF
+%endif
+
+%if 0
+%elifnmacro dummy 2
+ db '%elifnmacro dummy 2', LF
+%endif
+
+%if 0
+%elifnmacro dummy 3
+ db '%elifnmacro dummy 3', LF
+%endif
+
+%if 0
+%elifnmacro dummy 1+
+ db '%elifnmacro dummy 1+', LF
+%endif
+
+%if 0
+%elifnmacro dummy 2+
+ db '%elifnmacro dummy 2+', LF
+%endif
+
+%if 0
+%elifnmacro dummy 3+
+ db '%elifnmacro dummy 3+', LF
+%endif
+
+%if 0
+%elifnmacro dummy
+ db '%elifnmacro dummy', LF
+%endif
+
+%if 0
+%elifnmacro dummy 0-1
+ db '%elifnmacro dummy 0-1', LF
+%endif
+
+%if 0
+%elifnmacro dummy 1-2
+ db '%elifnmacro dummy 1-2', LF
+%endif
+
+%if 0
+%elifnmacro dummy 2-3
+ db '%elifnmacro dummy 2-3', LF
+%endif
+
+%if 0
+%elifnmacro dummy 3-4
+ db '%elifnmacro dummy 3-4', LF
+%endif
+
+%if 0
+%elifnmacro LF
+ db '%elifnmacro LF', LF
+%endif
+
+%if 1
+%elifdef CR
+ db 'bad %elifdef CR', LF
+%endif
+
+%if 1
+%elifdef LF
+ db 'bad %elifdef LF', LF
+%endif
+
+%if 1
+%elifmacro dummy 1
+ db 'bad %elifmacro dummy 1', LF
+%endif
+
+%if 1
+%elifmacro dummy 2
+ db 'bad %elifmacro dummy 2', LF
+%endif
+
+%if 1
+%elifmacro dummy 3
+ db 'bad %elifmacro dummy 3', LF
+%endif
+
+%if 1
+%elifmacro dummy 1+
+ db 'bad %elifmacro dummy 1+', LF
+%endif
+
+%if 1
+%elifmacro dummy 2+
+ db 'bad %elifmacro dummy 2+', LF
+%endif
+
+%if 1
+%elifmacro dummy 3+
+ db 'bad %elifmacro dummy 3+', LF
+%endif
+
+%if 1
+%elifmacro dummy
+ db 'bad %elifmacro dummy', LF
+%endif
+
+%if 1
+%elifmacro dummy 0-1
+ db 'bad %elifmacro dummy 0-1', LF
+%endif
+
+%if 1
+%elifmacro dummy 1-2
+ db 'bad %elifmacro dummy 1-2', LF
+%endif
+
+%if 1
+%elifmacro dummy 2-3
+ db 'bad %elifmacro dummy 2-3', LF
+%endif
+
+%if 1
+%elifmacro dummy 3-4
+ db 'bad %elifmacro dummy 3-4', LF
+%endif
+
+%if 1
+%elifmacro LF
+ db 'bad %elifmacro LF', LF
+%endif
+
+%if 1
+%elifndef CR
+ db 'bad %elifndef CR', LF
+%endif
+
+%if 1
+%elifndef LF
+ db 'bad %elifndef LF', LF
+%endif
+
+%if 1
+%elifnmacro dummy 1
+ db 'bad %elifnmacro dummy 1', LF
+%endif
+
+%if 1
+%elifnmacro dummy 2
+ db 'bad %elifnmacro dummy 2', LF
+%endif
+
+%if 1
+%elifnmacro dummy 3
+ db 'bad %elifnmacro dummy 3', LF
+%endif
+
+%if 1
+%elifnmacro dummy 1+
+ db 'bad %elifnmacro dummy 1+', LF
+%endif
+
+%if 1
+%elifnmacro dummy 2+
+ db 'bad %elifnmacro dummy 2+', LF
+%endif
+
+%if 1
+%elifnmacro dummy 3+
+ db 'bad %elifnmacro dummy 3+', LF
+%endif
+
+%if 1
+%elifnmacro dummy
+ db 'bad %elifnmacro dummy', LF
+%endif
+
+%if 1
+%elifnmacro dummy 0-1
+ db 'bad %elifnmacro dummy 0-1', LF
+%endif
+
+%if 1
+%elifnmacro dummy 1-2
+ db 'bad %elifnmacro dummy 1-2', LF
+%endif
+
+%if 1
+%elifnmacro dummy 2-3
+ db 'bad %elifnmacro dummy 2-3', LF
+%endif
+
+%if 1
+%elifnmacro dummy 3-4
+ db 'bad %elifnmacro dummy 3-4', LF
+%endif
+
+%if 1
+%elifnmacro LF
+ db 'bad %elifnmacro LF', LF
+%endif
+
diff --git a/test/iftoken.asm b/test/iftoken.asm
new file mode 100644
index 0000000..7a0fec4
--- /dev/null
+++ b/test/iftoken.asm
@@ -0,0 +1,317 @@
+;Testname=test; Arguments=-fbin -oiftoken.txt; Files=stdout stderr iftoken.txt
+
+%define ZMACRO
+%define NMACRO 1
+%define TMACRO 1 2
+ db 'N "":'
+%iftoken
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "":'
+%iftoken ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "ZMACRO":'
+%iftoken ZMACRO
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty ZMACRO
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "ZMACRO":'
+%iftoken ZMACRO ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty ZMACRO ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "NMACRO":'
+%iftoken NMACRO
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty NMACRO
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "NMACRO":'
+%iftoken NMACRO ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty NMACRO ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "TMACRO":'
+%iftoken TMACRO
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty TMACRO
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "TMACRO":'
+%iftoken TMACRO ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty TMACRO ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "1":'
+%iftoken 1
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty 1
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "1":'
+%iftoken 1 ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty 1 ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "+1":'
+%iftoken +1
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty +1
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "+1":'
+%iftoken +1 ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty +1 ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "1 2":'
+%iftoken 1 2
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty 1 2
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "1 2":'
+%iftoken 1 2 ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty 1 2 ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "1,2":'
+%iftoken 1,2
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty 1,2
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "1,2":'
+%iftoken 1,2 ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty 1,2 ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "foo":'
+%iftoken foo
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty foo
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "foo":'
+%iftoken foo ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty foo ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "foo bar":'
+%iftoken foo bar
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty foo bar
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "foo bar":'
+%iftoken foo bar ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty foo bar ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "%":'
+%iftoken %
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty %
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "%":'
+%iftoken % ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty % ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "+foo":'
+%iftoken +foo
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty +foo
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "+foo":'
+%iftoken +foo ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty +foo ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'N "<<":'
+%iftoken <<
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty <<
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
+ db 'C "<<":'
+%iftoken << ; With a comment!
+ db ' token'
+%else
+ db ' ntoken'
+%endif
+%ifempty << ; With a comment!
+ db ' empty'
+%else
+ db ' nempty'
+%endif
+ db 10
diff --git a/test/iftoken.pl b/test/iftoken.pl
new file mode 100755
index 0000000..925dd40
--- /dev/null
+++ b/test/iftoken.pl
@@ -0,0 +1,32 @@
+#!/usr/bin/perl
+
+@list = ('', 'ZMACRO', 'NMACRO', 'TMACRO', '1', '+1', '1 2', '1,2',
+ 'foo', 'foo bar', '%', '+foo', '<<');
+@tests = ('token', 'empty');
+
+print ";Testname=test; Arguments=-fbin -oiftoken.txt; Files=stdout stderr iftoken.txt"
+print "%define ZMACRO\n";
+print "%define NMACRO 1\n";
+print "%define TMACRO 1 2\n";
+
+foreach $x (@list) {
+ print "\tdb 'N \"$x\":'\n";
+ foreach $t (@tests) {
+ print "%if$t $x\n";
+ print "\tdb ' $t'\n";
+ print "%else\n";
+ print "\tdb ' n$t'\n";
+ print "%endif\n";
+ }
+ print "\tdb 10\n";
+
+ print "\tdb 'C \"$x\":'\n";
+ foreach $t (@tests) {
+ print "%if$t $x ; With a comment!\n";
+ print "\tdb ' $t'\n";
+ print "%else\n";
+ print "\tdb ' n$t'\n";
+ print "%endif\n";
+ }
+ print "\tdb 10\n";
+}
diff --git a/test/imacro.asm b/test/imacro.asm
new file mode 100644
index 0000000..bc397cc
--- /dev/null
+++ b/test/imacro.asm
@@ -0,0 +1,8 @@
+;Testname=test; Arguments=-fbin -oimacro.bin; Files=stdout stderr imacro.bin
+
+%imacro Zero 1
+ xor %1,%1
+%endmacro
+
+ Zero eax
+ zero eax
diff --git a/test/imm64.asm b/test/imm64.asm
new file mode 100644
index 0000000..ac50c62
--- /dev/null
+++ b/test/imm64.asm
@@ -0,0 +1,7 @@
+ bits 64
+ mov rax,11223344h
+ mov rax,dword 11223344h
+ mov eax,11223344h
+ mov [rax],dword 11223344h ; 32-bit operation
+ mov qword [rax],11223344h
+ mov qword [rax],dword 11223344h
diff --git a/test/immwarn.asm b/test/immwarn.asm
new file mode 100644
index 0000000..8bffbfa
--- /dev/null
+++ b/test/immwarn.asm
@@ -0,0 +1,91 @@
+;Testname=onowarn; Arguments=-Ox -DOPT=1 -DWARN=0 -fbin -oimmwarn.bin; Files=stdout stderr immwarn.bin
+;Testname=owarn; Arguments=-Ox -DOPT=1 -DWARN=1 -fbin -oimmwarn.bin; Files=stdout stderr immwarn.bin
+;Testname=nowarn; Arguments=-O0 -DOPT=0 -DWARN=0 -fbin -oimmwarn.bin; Files=stdout stderr immwarn.bin
+;Testname=warn; Arguments=-O0 -DOPT=1 -DWARN=1 -fbin -oimmwarn.bin; Files=stdout stderr immwarn.bin
+
+%ifndef WARN
+ %define WARN 1
+%endif
+
+ bits 16
+ push 1
+%if WARN
+ push 0ffffffffh
+%endif
+ push -1
+ push 0ffffh
+ push byte 0FFFFh
+
+ add ax,0FFFFh
+%if WARN
+ add ax,0FFFFFFFFh
+%endif
+ add ax,-1
+ add ax,byte 0FFFFh
+%if WARN
+ add ax,byte 0FFFFFFFFh
+%endif
+ add ax,-1
+
+ add cx,0FFFFh
+%if WARN
+ add cx,0FFFFFFFFh
+%endif
+ add cx,-1
+ add cx,byte 0FFFFh
+%if WARN
+ add cx,byte 0FFFFFFFFh
+%endif
+ add cx,-1
+
+ bits 32
+ push 1
+ push 0ffffffffh
+ push -1
+ push 0ffffh
+
+ push byte 1
+%if WARN
+ push byte 0ffffh
+%endif
+ push byte -1
+
+ push word 1
+ push word 0ffffh
+ push word -1
+
+ push dword 1
+ push dword 0ffffffffh
+ push dword -1
+
+ add eax,0FFFFh
+ add eax,0FFFFFFFFh
+ add eax,-1
+
+ add ecx,0FFFFh
+ add ecx,0FFFFFFFFh
+ add ecx,-1
+
+ bits 64
+ mov eax,7fffffffh
+ mov eax,80000000h
+ mov rax,7fffffffh
+ mov rax,80000000h
+%if WARN
+ mov rax,dword 80000000h
+%endif
+ add rcx,0FFFFh
+%if WARN
+ add rcx,0FFFFFFFFh
+%endif
+ add rcx,-1
+
+ add ecx,0FFFFh
+ add ecx,0FFFFFFFFh
+ add ecx,-1
+
+ push byte 1
+%if WARN
+ push byte 0ffffffffh
+%endif
+ push byte -1
diff --git a/test/imul.asm b/test/imul.asm
new file mode 100644
index 0000000..d30d25f
--- /dev/null
+++ b/test/imul.asm
@@ -0,0 +1,117 @@
+;Testname=nowarn; Arguments=-fbin -oimul.bin; Files=stdout stderr imul.bin
+;Testname=warn; Arguments=-DWARN -fbin -oimul.bin; Files=stdout stderr imul.bin
+
+%macro test 1-3 5 -2
+ bits %1
+
+%undef MEM
+%if %1 == 16
+ %define MEM [di]
+%elif %1 == 32
+ %define MEM [edi]
+%elif %1 == 64
+ %define MEM [rdi]
+%endif
+
+ imul al
+ imul byte MEM
+ imul ax
+ imul word MEM
+ imul eax
+ imul dword MEM
+%if %1 == 64
+ imul rdx
+ imul qword MEM
+%endif
+
+ imul ax,cx
+ imul ax,MEM
+ imul ax,word MEM
+ imul eax,ecx
+ imul eax,MEM
+ imul eax,dword MEM
+%if %1 == 64
+ imul rax,rcx
+ imul rax,MEM
+ imul rax,qword MEM
+%endif
+
+ imul ax,cx,%2
+ imul ax,cx,byte %2
+ imul ax,MEM,%2
+ imul ax,word MEM,%2
+ imul eax,ecx,%2
+ imul eax,ecx,byte %2
+ imul eax,MEM,%2
+ imul eax,dword MEM,%2
+%if %1 == 64
+ imul rax,rcx,%2
+ imul rax,rcx,byte %2
+ imul rax,MEM,%2
+ imul rax,qword MEM,%2
+%endif
+
+ imul ax,%2
+ imul ax,byte %2
+ imul eax,%2
+ imul eax,byte %2
+%if %1 == 64
+ imul rax,%2
+ imul rax,byte %2
+%endif
+
+ imul ax,cx,0x1234
+ imul ax,MEM,0x1234
+ imul ax,word MEM,0x1234
+ imul eax,ecx,0x12345678
+ imul eax,MEM,0x12345678
+ imul eax,dword MEM,0x12345678
+%if %1 == 64
+ imul rax,rcx,0x12345678
+ imul rax,MEM,0x12345678
+ imul rax,qword MEM,0x12345678
+%endif
+
+ imul ax,0x1234
+ imul eax,0x12345678
+%if %1 == 64
+ imul rax,0x12345678
+%endif
+
+ imul ax,cx,0xfffe
+ imul ax,MEM,0xfffe
+ imul ax,word MEM,0xfffe
+ imul ax,cx,0xfe
+ imul ax,MEM,0xfe
+ imul ax,word MEM,0xfe
+ imul eax,ecx,0xfffffffe
+ imul eax,MEM,0xfffffffe
+ imul eax,dword MEM,0xfffffffe
+ imul eax,ecx,0xfffe
+ imul eax,MEM,0xfffe
+ imul eax,dword MEM,0xfffe
+%if %1 == 64
+ imul rax,rcx,%3
+ imul rax,MEM,%3
+ imul rax,qword MEM,%3
+ imul rax,rcx,0xfffe
+ imul rax,MEM,0xfffe
+ imul rax,qword MEM,0xfffe
+%endif
+
+ imul ax,0xfffe
+ imul eax,0xfffffffe
+%if %1 == 64
+ imul rax,%3
+%endif
+%endmacro
+
+ test 16
+ test 32
+ test 64
+
+%ifdef WARN
+ test 16,0x999
+ test 32,0x999999
+ test 64,0x999999999,0xfffffffe
+%endif
diff --git a/test/inc1.asm b/test/inc1.asm
new file mode 100644
index 0000000..0e1058b
--- /dev/null
+++ b/test/inc1.asm
@@ -0,0 +1,6 @@
+; This file is part of the include test.
+; See inctest.asm for build instructions.
+
+message: db 'hello, world',13,10,'$'
+
+%include "inc2.asm"
diff --git a/test/inc2.asm b/test/inc2.asm
new file mode 100644
index 0000000..c3ba2f7
--- /dev/null
+++ b/test/inc2.asm
@@ -0,0 +1,8 @@
+; This file is part of the include test.
+; See inctest.asm for build instructions.
+
+_main: mov dx,message
+ mov ah,9
+ int 21h
+ mov ax,4c00h
+ int 21h
diff --git a/test/inctest.asm b/test/inctest.asm
new file mode 100644
index 0000000..35f2910
--- /dev/null
+++ b/test/inctest.asm
@@ -0,0 +1,15 @@
+;Testname=test; Arguments=-fbin -oinctest.com; Files=stdout stderr inctest.com
+
+; This file, plus inc1.asm and inc2.asm, test NASM's file inclusion
+; mechanism.
+;
+; This produces a DOS .COM file: to assemble, use
+; nasm -f bin inctest.asm -o inctest.com
+; and when run, it should print `hello, world'.
+
+ BITS 16
+ ORG 0x100
+
+ jmp _main
+
+%include "inc1.asm"
diff --git a/test/insnlbl.asm b/test/insnlbl.asm
new file mode 100644
index 0000000..e456372
--- /dev/null
+++ b/test/insnlbl.asm
@@ -0,0 +1,12 @@
+;Testname=test; Arguments=-fbin -oinsnlbl.bin; Files=stdout stderr insnlbl.bin
+
+;
+; Test "instruction as label" -- make opcodes legal as labels if
+; they are followed by a colon.
+;
+
+do: jmp dq+2
+ dw do, add, sub, dq
+add: jmp add-2
+sub: jmp do+2
+dq: dw $-sub
diff --git a/test/invlpga.asm b/test/invlpga.asm
new file mode 100644
index 0000000..21ab4b4
--- /dev/null
+++ b/test/invlpga.asm
@@ -0,0 +1,11 @@
+;Testname=unoptimized; Arguments=-fbin -oinvlpga.bin; Files=stdout stderr invlpga.bin
+;Testname=optimized; Arguments=-fbin -oinvlpga.bin -Ox; Files=stdout stderr invlpga.bin
+
+ bits 32
+ invlpga
+ invlpga ax,ecx
+ invlpga eax,ecx
+ bits 64
+ invlpga
+ invlpga eax,ecx
+ invlpga rax,ecx
diff --git a/test/jmp64.asm b/test/jmp64.asm
new file mode 100644
index 0000000..f007b9e
--- /dev/null
+++ b/test/jmp64.asm
@@ -0,0 +1,15 @@
+;Testname=test; Arguments=-fbin -ojmp64.bin; Files=stdout stderr jmp64.bin
+
+ bits 64
+ jmp rcx
+ jmp [rax]
+ jmp qword [rax]
+ jmp far [rax]
+ jmp far dword [rax]
+ jmp far qword [rax]
+ call rcx
+ call [rax]
+ call qword [rax]
+ call far [rax]
+ call far dword [rax]
+ call far qword [rax]
diff --git a/test/lar_lsl.asm b/test/lar_lsl.asm
new file mode 100644
index 0000000..a0a9c0e
--- /dev/null
+++ b/test/lar_lsl.asm
@@ -0,0 +1,124 @@
+;Testname=test; Arguments=-fbin -olar_lsl.bin; Files=stdout stderr lar_lsl.bin
+
+; LAR/LSL
+;---------
+
+; 1x ; = invalid due to lack of REX
+; 3x ; = invalid due to Mw
+
+%macro m 1
+
+ bits 16
+
+ %1 ax, ax
+ %1 ax,eax
+; %1 ax,rax
+
+ %1 eax, ax
+ %1 eax,eax
+; %1 eax,rax
+
+; %1 rax, ax
+; %1 rax,eax
+; %1 rax,rax
+
+ %1 ax, [0]
+ %1 ax, word [0]
+;;; %1 ax,dword [0]
+; %1 ax,qword [0]
+
+ %1 eax, [0]
+ %1 eax, word [0]
+;;; %1 eax,dword [0]
+; %1 eax,qword [0]
+
+; %1 rax, [0]
+; %1 rax, word [0]
+; %1 rax,dword [0]
+; %1 rax,qword [0]
+
+ bits 32
+
+ %1 ax, ax
+ %1 ax,eax
+; %1 ax,rax
+
+ %1 eax, ax
+ %1 eax,eax
+; %1 eax,rax
+
+; %1 rax, ax
+; %1 rax,eax
+; %1 rax,rax
+
+ %1 ax, [0]
+ %1 ax, word [0]
+;;; %1 ax,dword [0]
+; %1 ax,qword [0]
+
+ %1 eax, [0]
+ %1 eax, word [0]
+;;; %1 eax,dword [0]
+; %1 eax,qword [0]
+
+; %1 rax, [0]
+; %1 rax, word [0]
+; %1 rax,dword [0]
+; %1 rax,qword [0]
+
+ bits 64
+
+ %1 ax, ax
+ %1 ax,eax
+ %1 ax,rax ; $TODO: shouldn't emit REX.W $
+
+ %1 eax, ax
+ %1 eax,eax
+ %1 eax,rax ; $TODO: shouldn't emit REX.W $
+
+ %1 rax, ax
+ %1 rax,eax
+ %1 rax,rax
+
+ %1 ax, [0]
+ %1 ax, word [0]
+;;; %1 ax,dword [0]
+;;; %1 ax,qword [0]
+
+ %1 eax, [0]
+ %1 eax, word [0]
+;;; %1 eax,dword [0]
+;;; %1 eax,qword [0]
+
+ %1 rax, [0]
+ %1 rax, word [0]
+;;; %1 rax,dword [0]
+;;; %1 rax,qword [0]
+
+%endmacro
+
+m lar
+
+m lsl
+
+bits 16
+lar ax,[ si]
+lar ax,[esi]
+bits 32
+lar ax,[ si]
+lar ax,[esi]
+bits 64
+lar ax,[esi]
+lar ax,[rsi]
+
+bits 16
+lsl ax,[ si]
+lsl ax,[esi]
+bits 32
+lsl ax,[ si]
+lsl ax,[esi]
+bits 64
+lar ax,[esi]
+lsl ax,[rsi]
+
+; EOF
diff --git a/test/larlsl.asm b/test/larlsl.asm
new file mode 100644
index 0000000..cddaac7
--- /dev/null
+++ b/test/larlsl.asm
@@ -0,0 +1,23 @@
+;Testname=test; Arguments=-fbin -olarlsl.bin; Files=stdout stderr larlsl.bin
+
+ bits 64
+
+ lar ax,bx
+ lar ax,[rsi]
+ lar ax,word [rsi]
+ lar eax,bx
+ lar eax,[rsi]
+ lar eax,word [rsi]
+ lar rax,bx
+ lar rax,[rsi]
+ lar rax,word [rsi]
+
+ lsl ax,bx
+ lsl ax,[rsi]
+ lsl ax,word [rsi]
+ lsl eax,bx
+ lsl eax,[rsi]
+ lsl eax,word [rsi]
+ lsl rax,bx
+ lsl rax,[rsi]
+ lsl rax,word [rsi]
diff --git a/test/lnxhello.asm b/test/lnxhello.asm
new file mode 100644
index 0000000..1aa5a5f
--- /dev/null
+++ b/test/lnxhello.asm
@@ -0,0 +1,54 @@
+;Testname=aout; Arguments=-faout -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=aoutb; Arguments=-faoutb -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=as86; Arguments=-fas86 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=elf32; Arguments=-felf32 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+
+;
+; Assembly "Hello, World!" for Linux
+;
+
+
+; Properly defined in <sys/syscall.h>
+%define SYS_exit 1
+%define SYS_write 4
+
+ section .text
+
+ global _start
+_start:
+ ; gdb doesn't like to stop at the entry point address, so
+ ; we put a nop here for pure convenience
+ nop
+
+
+write_hello:
+ mov edx, hello_len
+ mov ecx, hello
+
+.loop:
+ mov eax, SYS_write
+ mov ebx, 1 ; stdout
+ int 80h
+
+ cmp eax, -4096
+ ja error
+
+ add ecx, eax
+ sub edx, eax
+ jnz .loop
+
+ok:
+ mov eax, SYS_exit
+ xor ebx, ebx
+ int 80h
+ hlt
+
+error:
+ mov eax, SYS_exit
+ mov ebx, 1 ; Error
+ int 80h
+ hlt
+
+ section .rodata
+hello: db "Hello, World!", 10
+hello_len equ $-hello
diff --git a/test/local.asm b/test/local.asm
new file mode 100644
index 0000000..8a42bb8
--- /dev/null
+++ b/test/local.asm
@@ -0,0 +1,19 @@
+;Testname=test; Arguments=-fbin -olocal.bin; Files=stdout stderr local.bin
+ bits 32
+
+%push bluttan
+
+%define %$localsize 0
+
+%stacksize flat
+%local l1:qword, l2:dword, l3:dword, l4:qword
+%arg a1:qword, a2:dword, a3:dword, a4:qword
+
+ mov eax,[a1]
+ mov ebx,[a2]
+ mov ecx,[a3]
+ mov edx,[a4]
+ mov [l1],eax
+ mov [l2],ebx
+ mov [l3],ecx
+ mov [l4],edx
diff --git a/test/loopoffs.asm b/test/loopoffs.asm
new file mode 100644
index 0000000..54ef4ac
--- /dev/null
+++ b/test/loopoffs.asm
@@ -0,0 +1,12 @@
+;Testname=unoptimized; Arguments=-fbin -oloopoffs.bin -O0; Files=stdout stderr loopoffs.bin
+;Testname=optimized; Arguments=-fbin -oloopoffs.bin -Ox; Files=stdout stderr loopoffs.bin
+ bits 16
+delay: loop delay
+ loop $
+delay2: a32 loop delay2
+ a32 loop $
+delay3: loop delay3,ecx
+ loop $,ecx
+delay4: a32 loop delay4,ecx
+ a32 loop $,ecx
+ \ No newline at end of file
diff --git a/test/macro-defaults.asm b/test/macro-defaults.asm
new file mode 100644
index 0000000..047f205
--- /dev/null
+++ b/test/macro-defaults.asm
@@ -0,0 +1,64 @@
+;Testname=warning; Arguments=-fbin -omacdef.bin -w+macro-defaults; Files=stdout stderr macdef.bin
+;Testname=nonwarning; Arguments=-fbin -omacdef.bin -w-macro-defaults; Files=stdout stderr macdef.bin
+
+%MACRO mmac_fix 1 a
+ ; While defined to take one parameter, any invocation will
+ ; see two, due to the default parameter.
+ %warning %0 %1 %2 %3 %4 %5
+%ENDMACRO
+mmac_fix one
+
+%MACRO mmac_var 1-2 a,b
+ ; While defined to take one or two parameters, invocations
+ ; will see three, due to the default parameters.
+ %warning %0 %1 %2 %3 %4 %5
+%ENDMACRO
+mmac_var one
+mmac_var one,two
+
+%MACRO mmac_plus 1-2+ a,b
+ ; This does not warn. Although this looks like two default
+ ; parameters, it ends up being only one: the "+" limits it
+ ; to two parameters; if invoked without a second parameter
+ ; the second parameter will be "a,b".
+ %warning %0 %1 %2 %3 %4 %5
+ ;Check rotating behaviour
+%ENDMACRO
+mmac_plus one
+mmac_plus one,two
+mmac_plus one,two,three
+
+%MACRO mmac_star 1-* a,b
+ ; This does not warn. Because the "*" extends the range of
+ ; parameters to infinity, the "a,b" default parameters can
+ ; not exceed that range.
+ %warning %0 %1 %2 %3 %4 %5
+%ENDMACRO
+mmac_star one
+mmac_star one,two
+mmac_star one,two,three
+
+%MACRO mmac_rotate 0-* a,b
+ %warning %0 %1 %2 %3 %4 %5
+ ;%rotate should rotate all parameters
+ %rotate 1
+ %warning %0 %1 %2 %3 %4 %5
+%ENDMACRO
+mmac_rotate
+mmac_rotate one
+mmac_rotate one,two
+mmac_rotate one,two,three
+
+;Scope / evaluation time test
+%define I 0
+%assign J 0
+%xdefine K 0
+
+%MACRO mmac_scope 0 I J K
+ %warning %1 %2 %3
+%ENDMACRO
+
+%define I 1
+%assign J 1
+%xdefine K 1
+mmac_scope
diff --git a/test/mmxsize.asm b/test/mmxsize.asm
new file mode 100644
index 0000000..0a47839
--- /dev/null
+++ b/test/mmxsize.asm
@@ -0,0 +1,38 @@
+;Testname=unoptimized; Arguments=-fbin -ommxsize.bin -O0; Files=stdout stderr mmxsize.bin
+;Testname=optimized; Arguments=-fbin -ommxsize.bin -Ox; Files=stdout stderr mmxsize.bin
+ bits 32
+ movd mm0,eax
+ movd mm0,[foo]
+ movq mm0,[foo]
+ movd mm0,dword [foo]
+ movq mm0,qword [foo]
+ movmskps eax,xmm1
+ movmskpd eax,xmm1
+ nop
+ movd xmm0,eax
+ movd xmm0,[foo]
+ movq xmm0,[foo]
+ movd xmm0,dword [foo]
+ movq xmm0,qword [foo]
+ nop
+
+ bits 64
+ movd mm0,eax
+ movq mm0,[foo]
+ movd mm0,dword [foo]
+ movq mm0,qword [foo]
+ movq mm0,rax
+ movmskps eax,xmm1
+ movmskpd eax,xmm1
+ nop
+ movd xmm0,eax
+ movq xmm0,[foo]
+ movd xmm0,dword [foo]
+ movq xmm0,qword [foo]
+ movq xmm0,rax
+ movmskps rax,xmm1
+ movmskpd rax,xmm1
+ nop
+
+ section .bss
+foo resq 1
diff --git a/test/movimm.asm b/test/movimm.asm
new file mode 100644
index 0000000..c34c166
--- /dev/null
+++ b/test/movimm.asm
@@ -0,0 +1,28 @@
+;Testname=unoptimized; Arguments=-fbin -omovimm.bin -O0; Files=stdout stderr movimm.bin
+;Testname=optimized; Arguments=-fbin -omovimm.bin -Ox; Files=stdout stderr movimm.bin
+ bits 64
+
+ mov rax,1234567890abcdefh
+ mov eax,1234567890abcdefh
+ mov rax,dword 1234567890abcdefh
+ mov rax,qword 1234567890abcdefh
+ mov dword [rsi],1234567890abcdefh
+ mov qword [rsi],1234567890abcdefh
+ mov dword [rsi],dword 1234567890abcdefh
+ mov qword [rsi],dword 1234567890abcdefh
+; mov qword [rsi],qword 1234567890abcdefh ; Error
+; mov [rsi],qword 1234567890abcdefh ; Error
+ mov [rsi],dword 1234567890abcdefh
+
+ ; The optimizer probably should compact these forms, doesn't yet?
+ mov rax,12345678h
+ mov eax,12345678h
+ mov rax,dword 12345678h
+ mov rax,qword 12345678h
+ mov dword [rsi],12345678h
+ mov qword [rsi],12345678h
+ mov dword [rsi],dword 12345678h
+ mov qword [rsi],dword 12345678h
+; mov qword [rsi],qword 12345678h ; Error
+; mov [rsi],qword 12345678h ; Error
+ mov [rsi],dword 12345678h
diff --git a/test/movnti.asm b/test/movnti.asm
new file mode 100644
index 0000000..920f327
--- /dev/null
+++ b/test/movnti.asm
@@ -0,0 +1,10 @@
+;Testname=test; Arguments=-fbin -omovnti.bin; Files=stdout stderr movnti.bin
+; BR 2028995
+
+ bits 16
+ movnti [si],eax
+ bits 32
+ movnti [esi],eax
+ bits 64
+ movnti [rsi],eax
+ movnti [rsi],rax
diff --git a/test/multisection.asm b/test/multisection.asm
new file mode 100644
index 0000000..34e7f7d
--- /dev/null
+++ b/test/multisection.asm
@@ -0,0 +1,96 @@
+;Testname=aout; Arguments=-faout -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=aoutb; Arguments=-faoutb -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=as86; Arguments=-fas86 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=elf32; Arguments=-felf32 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=elf64; Arguments=-felf64 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=obj; Arguments=-fobj -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=rdf; Arguments=-frdf -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=win32; Arguments=-fwin32 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+;Testname=win64; Arguments=-fwin64 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
+
+; To test where code that is placed before any explicit SECTION
+; gets placed, and what happens if a .text section has an ORG
+;statement, uncomment the following lines.
+;
+; times 10h nop
+;
+;section .text
+;org 0x300
+; times 20h inc ax
+
+; let's see which of these sections can be placed in the specified order.
+
+section .appspecific
+section .data
+section .stringdata
+section .mytext
+section .code
+section .extra_code
+
+
+section .stringdata
+mystr1: db "Hello, this is string 1", 13, 10, '$'
+
+section .extra_code
+org 0x200
+bits 16
+more:
+ mov si, asciz1
+ mov ah, 0x0E
+ xor bx, bx
+.print:
+ lodsb
+ test al, al
+ jz .end
+ int 0x10
+ jmp short .print
+.end:
+
+ xor ax, ax
+ int 0x16
+
+ mov ax, 0x4c00
+ int 0x21
+
+section .appspecific
+asciz1: db "This is string 2", 0
+
+section .code
+org 0x100
+bits 16
+
+start:
+ mov dx, mystr1
+ mov ah, 9
+ int 0x21
+
+ xor ax, ax
+ int 0x16
+
+ jmp more
+
+section .text
+ xor eax,eax
+ times 50h nop
+
+section .mytext
+
+ xor ebx,ebx
+
+section .data
+ db 95h,95h,95h,95h,95h,95h,95h,95h
+
+section .hmm
+ resd 2
+
+section .bss
+ resd 8
+
+section .final1
+ inc ax
+
+section .final2
+ inc bx
+
+section .final3
+ inc cx
diff --git a/test/nasmformat.asm b/test/nasmformat.asm
new file mode 100644
index 0000000..ea19b92
--- /dev/null
+++ b/test/nasmformat.asm
@@ -0,0 +1,17 @@
+;Testname=obj; Arguments=-fobj -onasmfomat.o; Files=stdout stderr nasmfomat.o
+;Testname=bin; Arguments=-fbin -onasmfomat.o; Files=stdout stderr nasmfomat.o
+;Testname=rdf; Arguments=-frdf -onasmfomat.o; Files=stdout stderr nasmfomat.o
+
+%if __OUTPUT_FORMAT__ == 'bin'
+
+db 'This is binary format file'
+
+%elif __OUTPUT_FORMAT__ == 'obj'
+
+db 'This is object format file'
+
+%else
+
+db 'This is some other format file'
+
+%endif
diff --git a/test/new b/test/new
new file mode 100755
index 0000000..403b4fb
--- /dev/null
+++ b/test/new
@@ -0,0 +1,9 @@
+#!/bin/sh
+for f; do
+ if [ -e "$f".asm ]; then
+ # For safety...
+ echo "$0: $f already exists" 1>&2
+ exit 1
+ fi
+ echo ";Testname=test; Arguments=-fbin -o$f.bin; Files=stdout stderr $f.bin" > "$f".asm
+done
diff --git a/test/nop.asm b/test/nop.asm
new file mode 100644
index 0000000..71b7f7b
--- /dev/null
+++ b/test/nop.asm
@@ -0,0 +1,17 @@
+;Testname=unoptimized; Arguments=-fbin -onop.bin; Files=stdout stderr nop.bin
+;Testname=optimized; Arguments=-fbin -onop.bin -Ox; Files=stdout stderr nop.bin
+
+ bits 64
+
+ nop
+ o64 nop
+ pause
+ o64 pause
+
+ xchg ax,ax
+ xchg eax,eax
+ xchg rax,rax
+
+ rep xchg ax,ax
+ rep xchg eax,eax
+ rep xchg rax,rax
diff --git a/test/nullfile.asm b/test/nullfile.asm
new file mode 100644
index 0000000..83e306e
--- /dev/null
+++ b/test/nullfile.asm
@@ -0,0 +1,4 @@
+;Testname=test; Arguments=-fbin -onull.bin; Files=stdout stderr null.bin
+;
+; A file that produces no output has been known to occationally crash NASM.
+;
diff --git a/test/objexe.asm b/test/objexe.asm
new file mode 100644
index 0000000..9959f40
--- /dev/null
+++ b/test/objexe.asm
@@ -0,0 +1,30 @@
+; Demonstration of how to write an entire .EXE format program as a .OBJ
+; file to be linked. Tested with the VAL free linker.
+; To build:
+; nasm -fobj objexe.asm
+; val objexe.obj,objexe.exe;
+; To test:
+; objexe
+; (should print `hello, world')
+
+ segment code
+
+..start: mov ax,data
+ mov ds,ax
+ mov ax,stack
+ mov ss,ax
+ mov sp,stacktop
+
+ mov dx,hello
+ mov ah,9
+ int 0x21
+
+ mov ax,0x4c00
+ int 0x21
+
+ segment data
+hello: db 'hello, world', 13, 10, '$'
+
+ segment stack stack
+ resb 64
+stacktop:
diff --git a/test/objlink.c b/test/objlink.c
new file mode 100644
index 0000000..b767b01
--- /dev/null
+++ b/test/objlink.c
@@ -0,0 +1,33 @@
+/*
+ * test source file for assembling to Microsoft 16-bit .OBJ
+ * build with (16-bit Microsoft C):
+ * nasm -f obj objtest.asm
+ * cl /AL objtest.obj objlink.c
+ * other compilers should work too, provided they handle large
+ * model in the same way as MS C
+ */
+
+#include <stdio.h>
+#include <inttypes.h>
+
+int8_t text[] = "hello, world\n";
+
+extern void function(int8_t *);
+extern int bsssym, commvar;
+extern void *selfptr;
+extern void *selfptr2;
+
+int main(void)
+{
+ printf("these should be identical: %p, %p\n",
+ (int32_t)selfptr, (int32_t)&selfptr);
+ printf("these should be equivalent but different: %p, %p\n",
+ (int32_t)selfptr2, (int32_t)&selfptr2);
+ printf("you should see \"hello, world\" twice:\n");
+ bsssym = 0xF00D;
+ commvar = 0xD00F;
+ function(text);
+ printf("this should be 0xF00E: 0x%X\n", bsssym);
+ printf("this should be 0xD00E: 0x%X\n", commvar);
+ return 0;
+}
diff --git a/test/objtest.asm b/test/objtest.asm
new file mode 100644
index 0000000..03b7f9e
--- /dev/null
+++ b/test/objtest.asm
@@ -0,0 +1,85 @@
+;Testname=unoptimized; Arguments=-O0 -fobj -oobj.o; Files=stdout stderr obj.o
+;Testname=optimized; Arguments=-Ox -fobj -oobj.o; Files=stdout stderr obj.o
+
+; test source file for assembling to Microsoft 16-bit .OBJ
+; build with (16-bit Microsoft C):
+; nasm -f obj objtest.asm
+; cl /AL objtest.obj objlink.c
+; other compilers should work too, provided they handle large
+; model in the same way as MS C
+
+; This file should test the following:
+; [1] Define and export a global symbol
+; [2] Define a non-global symbol
+; [3] Define a common symbol
+; [4] Define a NASM local label
+; [5] Reference a NASM local label
+; [6] Import an external symbol
+; [7] Make a PC-relative relocated reference
+; [8] Reference a symbol in the same section as itself
+; [9] Reference a symbol in a different segment from itself
+; [10] Define a segment group
+; [11] Take the offset of a symbol in a grouped segment w.r.t. its segment
+; [12] Reserve uninitialised data space in a segment
+; [13] Directly take the segment address of a segment
+; [14] Directly take the segment address of a group
+; [15] Use SEG on a non-external
+; [16] Use SEG on an external
+
+ bits 16
+
+ global _bsssym ; [1]
+ global _function ; [1]
+ global _selfptr ; [1]
+ global _selfptr2 ; [1]
+ common _commvar 2 ; [3]
+ extern _printf ; [6]
+
+ group mygroup mybss mydata ; [10]
+ group mygroup2 mycode mycode2 ; [10]
+
+ segment mycode private
+
+_function push bp
+ mov bp,sp
+ push ds
+ mov ax,mygroup ; [14]
+ mov ds,ax
+ inc word [_bsssym] ; [9]
+ mov ax,seg _commvar
+ mov ds,ax
+ dec word [_commvar]
+ pop ds
+ mov ax,[bp+6]
+ mov dx,[bp+8]
+ push dx
+ push ax
+ push dx
+ push ax
+ call far [cs:.printf] ; [5] [8]
+ pop ax
+ pop ax
+ call trampoline ; [7]
+ pop ax
+ pop ax
+ mov sp,bp
+ pop bp
+ retf
+
+.printf dw _printf, seg _printf ; [2] [4] [16]
+
+ segment mycode2 private
+
+trampoline: pop ax
+ push cs
+ push ax
+ jmp far _printf
+
+ segment mybss private
+
+_bsssym resw 64 ; [12]
+
+ segment mydata private
+
+_selfptr dw _selfptr, seg _selfptr ; [8] [15]
+_selfptr2 dw _selfptr2 wrt mydata, mydata ; [11] [13]
diff --git a/test/optimization.asm b/test/optimization.asm
new file mode 100644
index 0000000..d78209d
--- /dev/null
+++ b/test/optimization.asm
@@ -0,0 +1,104 @@
+;Testname=O0; Arguments=-O0 -fbin -ooptimization.bin; Files=stdout stderr optimization.bin
+;Testname=O1; Arguments=-O1 -fbin -ooptimization.bin; Files=stdout stderr optimization.bin
+;Testname=Ox; Arguments=-Ox -fbin -ooptimization.bin; Files=stdout stderr optimization.bin
+
+BITS 32
+
+; Simple
+jmp foo
+times 124 nop
+foo:
+
+; Must start short to converge optimally
+jmp car
+times 127 nop
+car:
+
+; Always near
+jmp cdr
+times 128 nop
+cdr:
+
+
+; Simple
+add eax, quux2 - quux1
+quux1:
+times 127 nop
+quux2:
+
+; Must start short
+corge1:
+add eax, corge2 - corge1
+times 127 - 3 nop
+corge2:
+
+
+; Simple
+lea eax, [bolug2-bolug1]
+bolug1:
+times 127 nop
+bolug2:
+
+; Must start short
+calog1:
+lea eax, [calog2-calog1]
+times 127 - 3 nop
+calog2:
+
+
+; Simple
+lea eax, [eax+dolug2-dolug1]
+dolug1:
+times 127 nop
+dolug2:
+
+; Must start short
+ealog1:
+lea eax, [eax+ealog2-ealog1]
+times 127 - 3 nop
+ealog2:
+
+; Must stay long!
+lea eax, [eax+folug2-folug1]
+folug1:
+times 128 nop
+folug2:
+
+; Must stay long!
+galog1:
+lea eax, [eax+galog2-galog1]
+times 128 - 3 nop
+galog2:
+
+; Sbyte tests...
+onetwentysix equ 126
+onetwentynine equ 129
+
+add eax,onetwentyseven ; sbyte (forward)
+add eax,onetwentyeight ; not sbyte (forward)
+add eax,onetwentyseven ; sbyte (forward)
+add eax,onetwentysix ; sbyte (backward)
+add eax,onetwentynine ; not sbyte (backward)
+add ecx,onetwentyseven ; sbyte (forward)
+add ecx,onetwentyeight ; not sbyte (forward)
+add ecx,onetwentyseven ; sbyte (forward)
+add ecx,onetwentysix ; sbyte (backward)
+add ecx,onetwentynine ; not sbyte (backward)
+
+onetwentyseven equ 127
+onetwentyeight equ 128
+
+; Simple
+add eax, holug2-holug1
+holug1:
+times 127 nop
+holug2:
+
+; Must start short
+ialog1:
+add eax, ialog2-ialog1
+times 127 - 3 nop
+ialog2:
+
+; Do not confuse forward references and segmentless addresses!
+jmp 12345
diff --git a/test/org.asm b/test/org.asm
new file mode 100644
index 0000000..792c39a
--- /dev/null
+++ b/test/org.asm
@@ -0,0 +1,18 @@
+;Testname=elf64; Arguments=-Ox -felf64 -oorg.o; Files=stdout stderr org.o
+;Testname=win64; Arguments=-Ox -fwin64 -oorg.o; Files=stdout stderr org.o
+
+;
+; Simple test of a 64-bit org directive
+;
+ bits 64
+ org 0xffffffffffff0000
+
+hello: jmp there
+ nop
+ nop
+there:
+ add rax,[rsp+rbx]
+ inc eax
+
+ section .data
+there_ptr dq there
diff --git a/test/perf/label.pl b/test/perf/label.pl
new file mode 100755
index 0000000..9b59768
--- /dev/null
+++ b/test/perf/label.pl
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+#
+# Generate a test case for label lookup performance
+#
+
+($len) = @ARGV;
+$len = 100000 unless ($len);
+
+print "\tbits 32\n";
+print "\tsection .data\n";
+print "\n";
+
+for ($i = 0; $i < $len; $i++) {
+ print "l$i:\n";
+ for ($j = 0; $j < 8; $j++) {
+ print "\tdd l", int(rand($i+1)), "\n";
+ }
+}
diff --git a/test/perf/macro.pl b/test/perf/macro.pl
new file mode 100755
index 0000000..b729805
--- /dev/null
+++ b/test/perf/macro.pl
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+#
+# Generate a test case for macro lookup performance
+#
+
+($len) = @ARGV;
+$len = 100000 unless ($len);
+
+print "\tbits 32\n";
+print "\tsection .data\n";
+print "\n";
+
+for ($i = 0; $i < $len; $i++) {
+ print "%define m$i $i\n";
+ for ($j = 0; $j < 8; $j++) {
+ print "\tdd m", int(rand($i+1)), "\n";
+ }
+}
diff --git a/test/perf/token.pl b/test/perf/token.pl
new file mode 100755
index 0000000..4a9e3ae
--- /dev/null
+++ b/test/perf/token.pl
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+#
+# Generate a test case for token lookup performance
+#
+
+@insns = qw(add sub adc sbb and or xor mov);
+@regs = qw(eax ebx ecx edx esp ebp esi edi);
+
+srand(0);
+sub pickone(@) {
+ return $_[int(rand(scalar @_))];
+}
+
+($len) = @ARGV;
+$len = 1000000 unless ($len);
+
+print "\tbits 32\n";
+print "\n";
+
+for ($i = 0; $i < $len; $i++) {
+ print "\t", pickone(@insns), " ",
+ pickone(@regs), ",", pickone(@regs), "\n";
+}
diff --git a/test/performtest.pl b/test/performtest.pl
new file mode 100755
index 0000000..f7865b3
--- /dev/null
+++ b/test/performtest.pl
@@ -0,0 +1,192 @@
+#!/usr/bin/perl
+#Perform tests on nasm
+
+use strict;
+use warnings;
+
+use Getopt::Long qw(GetOptions);
+use Pod::Usage qw(pod2usage);
+
+use File::Basename qw(fileparse);
+use File::Compare qw(compare compare_text);
+use File::Copy qw(move);
+use File::Path qw(mkpath rmtree);
+
+#sub debugprint { print (pop() . "\n"); }
+ sub debugprint { }
+
+my $globalresult = 0;
+
+#Process one testfile
+sub perform {
+ my ($clean, $diff, $golden, $nasm, $quiet, $testpath) = @_;
+ my ($stdoutfile, $stderrfile) = ("stdout", "stderr");
+
+ my ($testname, $ignoredpath, $ignoredsuffix) = fileparse($testpath, ".asm");
+ debugprint $testname;
+
+ my $outputdir = $golden ? "golden" : "testresults";
+
+ mkdir "$outputdir" unless -d "$outputdir";
+
+ if ($clean) {
+ rmtree "$outputdir/$testname";
+ return;
+ }
+
+ if(-d "$outputdir/$testname") {
+ rmtree "$outputdir/$testname";
+ }
+
+ open(TESTFILE, '<', $testpath) or (warn "Can't open $testpath\n", return);
+ TEST:
+ while(<TESTFILE>) {
+ #See if there is a test case
+ last unless /Testname=(.*);\s*Arguments=(.*);\s*Files=(.*)/;
+ my ($subname, $arguments, $files) = ($1, $2, $3);
+ debugprint("$subname | $arguments | $files");
+
+ #Call nasm with this test case
+ system("$nasm $arguments $testpath > $stdoutfile 2> $stderrfile");
+ debugprint("$nasm $arguments $testpath > $stdoutfile 2> $stderrfile ----> $?");
+
+ #Move the output to the test dir
+ mkpath("$outputdir/$testname/$subname");
+ foreach(split / /,$files) {
+ if (-f $_) {
+ move($_, "$outputdir/$testname/$subname/$_") or die $!
+ }
+ }
+ unlink ("$stdoutfile", "$stderrfile"); #Just to be sure
+
+ if($golden) {
+ print "Test $testname/$subname created.\n" unless $quiet;
+ } else {
+ #Compare them with the golden files
+ my $result = 0;
+ my @failedfiles = ();
+ foreach(split / /, $files) {
+ if(-f "$outputdir/$testname/$subname/$_") {
+ my $temp;
+ if($_ eq $stdoutfile or $_ eq $stderrfile) {
+ #Compare stdout and stderr in text mode so line ending changes won't matter
+ $temp = compare_text("$outputdir/$testname/$subname/$_", "golden/$testname/$subname/$_",
+ sub { my ($a, $b) = @_;
+ $a =~ s/\r//g;
+ $b =~ s/\r//g;
+ $a ne $b; } );
+ } else {
+ $temp = compare("$outputdir/$testname/$subname/$_", "golden/$testname/$subname/$_");
+ }
+
+ if($temp == 1) {
+ #different
+ $result = 1;
+ $globalresult = 1;
+ push @failedfiles, $_;
+ } elsif($temp == -1) {
+ #error
+ print "Can't compare at $testname/$subname file $_\n";
+ next TEST;
+ }
+ } elsif (-f "golden/$testname/$subname/$_") {
+ #File exists in golden but not in output
+ $result = 1;
+ $globalresult = 1;
+ push @failedfiles, $_;
+ }
+ }
+
+ if($result == 0) {
+ print "Test $testname/$subname succeeded.\n" unless $quiet;
+ } elsif ($result == 1) {
+ print "Test $testname/$subname failed on @failedfiles.\n";
+ if($diff) {
+ for(@failedfiles) {
+ if($_ eq $stdoutfile or $_ eq $stderrfile) {
+ system "diff -u golden/$testname/$subname/$_ $outputdir/$testname/$subname/$_";
+ print "\n";
+ }
+ }
+ }
+ } else {
+ die "Impossible result";
+ }
+ }
+ }
+ close(TESTFILE);
+}
+
+my $nasm;
+my $clean = 0;
+my $diff = 0;
+my $golden = 0;
+my $help = 0;
+my $verbose = 0;
+
+GetOptions('clean' => \$clean,
+ 'diff'=> \$diff,
+ 'golden' => \$golden,
+ 'help' => \$help,
+ 'verbose' => \$verbose,
+ 'nasm=s' => \$nasm
+ ) or pod2usage();
+
+pod2usage() if $help;
+die "Please specify either --nasm or --clean. Use --help for help.\n"
+unless $nasm or $clean;
+die "Please specify the test files, e.g. *.asm\n" unless @ARGV;
+
+unless (!defined $nasm or -x $nasm) {
+ warn "Warning: $nasm may not be executable. Expect problems.\n\n";
+ sleep 5;
+}
+
+perform($clean, $diff, $golden, $nasm, ! $verbose, $_) foreach @ARGV;
+exit $globalresult;
+
+__END__
+
+=head1 NAME
+
+performtest.pl - NASM regression tester based on golden files
+
+=head1 SYNOPSIS
+
+performtest.pl [options] [testfile.asm ...]
+
+Runs NASM on the specified test files and compare the results
+with "golden" output files.
+
+ Options:
+ --clean Clean up test results (or golden files with --golden)
+ --diff Execute diff when stdout or stderr don't match
+ --golden Create golden files
+ --help Get this help
+ --nasm=file Specify the file name for the NASM executable, e.g. ../nasm
+ --verbose Get more output
+
+ If --clean is not specified, --nasm is required.
+
+ testfile.asm ...:
+ One or more files that NASM should be tested with,
+ often *.asm in the test directory.
+ It should contain one or more option lines at the start,
+ in the following format:
+
+;Testname=<testname>; Arguments=<arguments to nasm>; Files=<output files>
+
+ If no such lines are found at the start, the file is skipped.
+ testname should ideally describe the arguments, eg. unoptimized for -O0.
+ arguments can be an optimization level (-O), an output format (-f),
+ an output file specifier (-o) etc.
+ The output files should be a space seperated list of files that will
+ be checked for regressions. This should often be the output file
+ and the special files stdout and stderr.
+
+Any mismatch could be a regression,
+but it doesn't have to be. COFF files have a timestamp which
+makes this method useless. ELF files have a comment section
+with the current version of NASM, so they will change each version number.
+
+=cut
diff --git a/test/pinsr16.asm b/test/pinsr16.asm
new file mode 100644
index 0000000..0159839
--- /dev/null
+++ b/test/pinsr16.asm
@@ -0,0 +1,53 @@
+;Testname=test; Arguments=-O0 -fbin -opinsr16.bin; Files=stdout stderr pinsr16.bin
+ bits 16
+
+ pinsrw mm0,eax,0
+ pinsrw mm1,si,0
+ pinsrw mm2,[bx],0
+ pinsrw mm3,word [bx],0
+
+ pinsrb xmm0,eax,0
+ pinsrb xmm1,sil,0
+; pinsrb xmm1,bh,0
+ pinsrb xmm2,[bx],0
+ pinsrb xmm3,byte [bx],0
+
+ pinsrw xmm0,eax,0
+ pinsrw xmm1,si,0
+ pinsrw xmm2,[bx],0
+ pinsrw xmm3,word [bx],0
+
+ pinsrd xmm0,eax,0
+ pinsrd xmm1,esi,0
+ pinsrd xmm2,[bx],0
+ pinsrd xmm3,dword [bx],0
+
+ vpinsrb xmm0,eax,0
+ vpinsrb xmm1,bl,0
+ vpinsrb xmm2,[bx],0
+ vpinsrb xmm3,byte [bx],0
+
+ vpinsrw xmm0,eax,0
+ vpinsrw xmm1,si,0
+ vpinsrw xmm2,[bx],0
+ vpinsrw xmm3,word [bx],0
+
+ vpinsrd xmm0,eax,0
+ vpinsrd xmm1,esi,0
+ vpinsrd xmm2,[bx],0
+ vpinsrd xmm3,dword [bx],0
+
+ vpinsrb xmm4,xmm0,eax,0
+ vpinsrb xmm5,xmm1,bl,0
+ vpinsrb xmm6,xmm2,[bx],0
+ vpinsrb xmm7,xmm3,byte [bx],0
+
+ vpinsrw xmm4,xmm0,eax,0
+ vpinsrw xmm5,xmm1,si,0
+ vpinsrw xmm6,xmm2,[bx],0
+ vpinsrw xmm7,xmm3,word [bx],0
+
+ vpinsrd xmm4,xmm0,eax,0
+ vpinsrd xmm5,xmm1,esi,0
+ vpinsrd xmm6,xmm2,[bx],0
+ vpinsrd xmm7,xmm3,dword [bx],0
diff --git a/test/pinsr32.asm b/test/pinsr32.asm
new file mode 100644
index 0000000..24b3e58
--- /dev/null
+++ b/test/pinsr32.asm
@@ -0,0 +1,53 @@
+;Testname=test; Arguments=-O0 -fbin -opinsr32.bin; Files=stdout stderr pinsr32.bin
+ bits 32
+
+ pinsrw mm0,eax,0
+ pinsrw mm1,si,0
+ pinsrw mm2,[ecx],0
+ pinsrw mm3,word [ecx],0
+
+ pinsrb xmm0,eax,0
+ pinsrb xmm1,sil,0
+; pinsrb xmm1,bh,0
+ pinsrb xmm2,[ecx],0
+ pinsrb xmm3,byte [ecx],0
+
+ pinsrw xmm0,eax,0
+ pinsrw xmm1,si,0
+ pinsrw xmm2,[ecx],0
+ pinsrw xmm3,word [ecx],0
+
+ pinsrd xmm0,eax,0
+ pinsrd xmm1,esi,0
+ pinsrd xmm2,[ecx],0
+ pinsrd xmm3,dword [ecx],0
+
+ vpinsrb xmm0,eax,0
+ vpinsrb xmm1,bl,0
+ vpinsrb xmm2,[ecx],0
+ vpinsrb xmm3,byte [ecx],0
+
+ vpinsrw xmm0,eax,0
+ vpinsrw xmm1,si,0
+ vpinsrw xmm2,[ecx],0
+ vpinsrw xmm3,word [ecx],0
+
+ vpinsrd xmm0,eax,0
+ vpinsrd xmm1,esi,0
+ vpinsrd xmm2,[ecx],0
+ vpinsrd xmm3,dword [ecx],0
+
+ vpinsrb xmm4,xmm0,eax,0
+ vpinsrb xmm5,xmm1,bl,0
+ vpinsrb xmm6,xmm2,[ecx],0
+ vpinsrb xmm7,xmm3,byte [ecx],0
+
+ vpinsrw xmm4,xmm0,eax,0
+ vpinsrw xmm5,xmm1,si,0
+ vpinsrw xmm6,xmm2,[ecx],0
+ vpinsrw xmm7,xmm3,word [ecx],0
+
+ vpinsrd xmm4,xmm0,eax,0
+ vpinsrd xmm5,xmm1,esi,0
+ vpinsrd xmm6,xmm2,[ecx],0
+ vpinsrd xmm7,xmm3,dword [ecx],0
diff --git a/test/pinsr64.asm b/test/pinsr64.asm
new file mode 100644
index 0000000..8eedfdd
--- /dev/null
+++ b/test/pinsr64.asm
@@ -0,0 +1,68 @@
+;Testname=test; Arguments=-O0 -fbin -opinsr64.bin; Files=stdout stderr pinsr64.bin
+ bits 64
+
+ pinsrw mm0,eax,0
+ pinsrw mm1,si,0
+ pinsrw mm2,[rcx],0
+ pinsrw mm3,word [rcx],0
+
+ pinsrb xmm0,eax,0
+ pinsrb xmm1,sil,0
+; pinsrb xmm1,bh,0
+ pinsrb xmm2,[rcx],0
+ pinsrb xmm3,byte [rcx],0
+
+ pinsrw xmm0,eax,0
+ pinsrw xmm1,si,0
+ pinsrw xmm2,[rcx],0
+ pinsrw xmm3,word [rcx],0
+
+ pinsrd xmm0,eax,0
+ pinsrd xmm1,esi,0
+ pinsrd xmm2,[rcx],0
+ pinsrd xmm3,dword [rcx],0
+
+ pinsrq xmm0,rax,0
+ pinsrq xmm1,rsi,0
+ pinsrq xmm2,[rcx],0
+ pinsrq xmm3,qword [rcx],0
+
+ vpinsrb xmm0,eax,0
+ vpinsrb xmm1,sil,0
+ vpinsrb xmm2,[rcx],0
+ vpinsrb xmm3,byte [rcx],0
+
+ vpinsrw xmm0,eax,0
+ vpinsrw xmm1,si,0
+ vpinsrw xmm2,[rcx],0
+ vpinsrw xmm3,word [rcx],0
+
+ vpinsrd xmm0,eax,0
+ vpinsrd xmm1,esi,0
+ vpinsrd xmm2,[rcx],0
+ vpinsrd xmm3,dword [rcx],0
+
+ vpinsrq xmm0,rax,0
+ vpinsrq xmm1,rsi,0
+ vpinsrq xmm2,[rcx],0
+ vpinsrq xmm3,qword [rcx],0
+
+ vpinsrb xmm4,xmm0,eax,0
+ vpinsrb xmm5,xmm1,sil,0
+ vpinsrb xmm6,xmm2,[rcx],0
+ vpinsrb xmm7,xmm3,byte [rcx],0
+
+ vpinsrw xmm4,xmm0,eax,0
+ vpinsrw xmm5,xmm1,si,0
+ vpinsrw xmm6,xmm2,[rcx],0
+ vpinsrw xmm7,xmm3,word [rcx],0
+
+ vpinsrd xmm4,xmm0,eax,0
+ vpinsrd xmm5,xmm1,esi,0
+ vpinsrd xmm6,xmm2,[rcx],0
+ vpinsrd xmm7,xmm3,dword [rcx],0
+
+ vpinsrq xmm4,xmm0,rax,0
+ vpinsrq xmm5,xmm1,rsi,0
+ vpinsrq xmm6,xmm2,[rcx],0
+ vpinsrq xmm7,xmm3,qword [rdx],0
diff --git a/test/popcnt.asm b/test/popcnt.asm
new file mode 100644
index 0000000..0009619
--- /dev/null
+++ b/test/popcnt.asm
@@ -0,0 +1,32 @@
+;Testname=test; Arguments=-fbin -opopcnt.bin; Files=stdout stderr popcnt.bin
+
+ bits 16
+
+ popcnt ax,cx
+ popcnt ax,[si]
+ popcnt ax,word [si]
+ popcnt eax,ecx
+ popcnt eax,[si]
+ popcnt eax,dword [si]
+
+ bits 32
+
+ popcnt ax,cx
+ popcnt ax,[esi]
+ popcnt ax,word [esi]
+ popcnt eax,ecx
+ popcnt eax,[esi]
+ popcnt eax,dword [esi]
+
+ bits 64
+
+ popcnt ax,cx
+ popcnt ax,[rsi]
+ popcnt ax,word [rsi]
+ popcnt eax,ecx
+ popcnt eax,[rsi]
+ popcnt eax,dword [rsi]
+ popcnt rax,rcx
+ popcnt rax,[rsi]
+ popcnt rax,qword [rsi]
+ \ No newline at end of file
diff --git a/test/ppindirect.asm b/test/ppindirect.asm
new file mode 100644
index 0000000..0a30d07
--- /dev/null
+++ b/test/ppindirect.asm
@@ -0,0 +1,42 @@
+;Testname=test; Arguments=-E -o ppindirect.out; Files=ppindirect.out
+
+; Fun tests of the preprocessor indirection mode...
+
+%assign foo1 11
+%assign foo11 1111
+%assign foo2 22
+%assign foo22 2222
+%assign foo3 33
+%assign foo33 3333
+%assign n 2
+foo%[foo%[n]]*100
+foo%[n]*100
+%assign foo%[foo%[n]] foo%[foo%[n]]*100
+;%assign foo%[n] foo%[n]*100
+
+ foo1
+ foo2
+ foo3
+ foo11
+ foo22
+ foo33
+
+%define foo33bar 999999
+ %[foo%[foo3]bar]
+
+%assign bctr 0
+%macro bluttan 0
+%assign bctr bctr+1
+%assign bluttan%[bctr] bctr
+%defstr bstr bluttan%[bctr]
+ bluttan%[bctr]
+ bstr
+%endmacro
+
+%rep 20
+ bluttan
+%endrep
+%rep 20
+ bluttan%[bctr]
+%assign bctr bctr-1
+%endrep
diff --git a/test/pushseg.asm b/test/pushseg.asm
new file mode 100644
index 0000000..7bd7c95
--- /dev/null
+++ b/test/pushseg.asm
@@ -0,0 +1,17 @@
+;Testname=test; Arguments=-fbin -opushseg.bin; Files=stdout stderr pushseg.bin
+
+ bits 16
+
+ push cs
+ push ds
+ push es
+ push ss
+ push fs
+ push gs
+
+ pop gs
+ pop fs
+ pop ss
+ pop es
+ pop ds
+ pop cs ; 8086 only, does not disassemble
diff --git a/test/r13.asm b/test/r13.asm
new file mode 100644
index 0000000..88079e1
--- /dev/null
+++ b/test/r13.asm
@@ -0,0 +1,15 @@
+;Testname=test; Arguments=-fbin -or13.bin; Files=stdout stderr r13.bin
+
+ bits 64
+ mov rax,[rbx]
+ mov rax,[rbx*4]
+ mov rax,[rbx+rbx*2]
+ mov rax,[r13+rbx*2]
+ mov rax,[rbp]
+ mov rax,[rbp*4]
+ mov rax,[rbp+rbp*2]
+ mov rax,[rbp+r13*2]
+ mov rax,[r13]
+ mov rax,[r13*4]
+ mov rax,[r13+rbp*2]
+ mov rax,[r13+r13*2]
diff --git a/test/radix.asm b/test/radix.asm
new file mode 100644
index 0000000..1c56457
--- /dev/null
+++ b/test/radix.asm
@@ -0,0 +1,54 @@
+;Testname=test; Arguments=-fbin -oradix.bin; Files=stdout stderr radix.bin
+
+ ;; Integer constants...
+
+ dd 1010_0101 ; Decimal
+ dd 01010_0101 ; Decimal (*not* octal!)
+ dd 0d1010_0101 ; Decimal
+ dd 0t1010_0101 ; Decimal
+ dd 1010_0101d ; Decimal
+ dd 1010_0101t ; Decimal
+
+ dd 0b1010_0101 ; Binary
+ dd 0y1010_0101 ; Binary
+ dd 1010_0101b ; Binary
+ dd 1010_0101y ; Binary
+
+ dd 0o1010_0101 ; Octal
+ dd 0q1010_0101 ; Octal
+ dd 1010_0101o ; Octal
+ dd 1010_0101q ; Octal
+
+ dd 0h1010_0101 ; Hex
+ dd 0x1010_0101 ; Hex
+ dd 1010_0101h ; Hex
+ dd 1010_0101x ; Hex
+ dd $1010_0101 ; Hex
+
+ db 0h ; Zero!
+ db 0x ; Zero!
+ db 0b ; Zero!
+ db 0dh ; Hex
+ db 0bh ; Hex
+ db 0dx ; Hex
+ db 0bx ; Hex
+ db 0hd ; Hex
+ db 0hb ; Hex
+ db 0xd ; Hex
+ db 0xb ; Hex
+
+ ;; Floating-point constants
+ ;; All of these should output B4A21147
+ dd 3.7282705e+4 ; Decimal
+ dd 00003.7282705e+4 ; Decimal
+ dd 0d3.7282705e+4 ; Decimal
+ dd 0t3.7282705e+4 ; Decimal
+
+ dd 0x1.23456789p+15 ; Hex
+ dd 0h1.23456789p+15 ; Hex
+
+ dd 0o1.10642547422p+15 ; Octal
+ dd 0q1.10642547422p+15 ; Octal
+
+ dd 0b1.0010_0011_0100_0101_0110_0111_1000_1001p+15 ; Binary
+ dd 0y1.0010_0011_0100_0101_0110_0111_1000_1001p+15 ; Binary
diff --git a/test/riprel.asm b/test/riprel.asm
new file mode 100644
index 0000000..757a8dd
--- /dev/null
+++ b/test/riprel.asm
@@ -0,0 +1,5357 @@
+;Testname=unoptimized; Arguments=-fbin -oriprel.bin -O0; Files=stdout stderr riprel.bin
+;Testname=optimized; Arguments=-fbin -oriprel.bin -Ox; Files=stdout stderr riprel.bin
+ bits 64
+
+ default abs
+
+ mov al,[foo]
+ mov bl,[foo]
+ mov ax,[foo]
+ mov bx,[foo]
+ mov eax,[foo]
+ mov ebx,[foo]
+ mov rax,[foo]
+ mov rbx,[foo]
+ mov al,[0xaaaaaaaaaaaaaaaa]
+ mov bl,[0xaaaaaaaaaaaaaaaa]
+ mov ax,[0xaaaaaaaaaaaaaaaa]
+ mov bx,[0xaaaaaaaaaaaaaaaa]
+ mov eax,[0xaaaaaaaaaaaaaaaa]
+ mov ebx,[0xaaaaaaaaaaaaaaaa]
+ mov rax,[0xaaaaaaaaaaaaaaaa]
+ mov rbx,[0xaaaaaaaaaaaaaaaa]
+ mov al,[0xbbbbbbbb]
+ mov bl,[0xbbbbbbbb]
+ mov ax,[0xbbbbbbbb]
+ mov bx,[0xbbbbbbbb]
+ mov eax,[0xbbbbbbbb]
+ mov ebx,[0xbbbbbbbb]
+ mov rax,[0xbbbbbbbb]
+ mov rbx,[0xbbbbbbbb]
+ mov al,[0xffffffffcccccccc]
+ mov bl,[0xffffffffcccccccc]
+ mov ax,[0xffffffffcccccccc]
+ mov bx,[0xffffffffcccccccc]
+ mov eax,[0xffffffffcccccccc]
+ mov ebx,[0xffffffffcccccccc]
+ mov rax,[0xffffffffcccccccc]
+ mov rbx,[0xffffffffcccccccc]
+
+ mov al,[dword foo]
+ mov bl,[dword foo]
+ mov ax,[dword foo]
+ mov bx,[dword foo]
+ mov eax,[dword foo]
+ mov ebx,[dword foo]
+ mov rax,[dword foo]
+ mov rbx,[dword foo]
+ mov al,[dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[dword 0xbbbbbbbb]
+ mov bl,[dword 0xbbbbbbbb]
+ mov ax,[dword 0xbbbbbbbb]
+ mov bx,[dword 0xbbbbbbbb]
+ mov eax,[dword 0xbbbbbbbb]
+ mov ebx,[dword 0xbbbbbbbb]
+ mov rax,[dword 0xbbbbbbbb]
+ mov rbx,[dword 0xbbbbbbbb]
+ mov al,[dword 0xffffffffcccccccc]
+ mov bl,[dword 0xffffffffcccccccc]
+ mov ax,[dword 0xffffffffcccccccc]
+ mov bx,[dword 0xffffffffcccccccc]
+ mov eax,[dword 0xffffffffcccccccc]
+ mov ebx,[dword 0xffffffffcccccccc]
+ mov rax,[dword 0xffffffffcccccccc]
+ mov rbx,[dword 0xffffffffcccccccc]
+
+ mov al,[qword foo]
+ mov bl,[qword foo]
+ mov ax,[qword foo]
+ mov bx,[qword foo]
+ mov eax,[qword foo]
+ mov ebx,[qword foo]
+ mov rax,[qword foo]
+ mov rbx,[qword foo]
+ mov al,[qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[qword 0xbbbbbbbb]
+ mov bl,[qword 0xbbbbbbbb]
+ mov ax,[qword 0xbbbbbbbb]
+ mov bx,[qword 0xbbbbbbbb]
+ mov eax,[qword 0xbbbbbbbb]
+ mov ebx,[qword 0xbbbbbbbb]
+ mov rax,[qword 0xbbbbbbbb]
+ mov rbx,[qword 0xbbbbbbbb]
+ mov al,[qword 0xffffffffcccccccc]
+ mov bl,[qword 0xffffffffcccccccc]
+ mov ax,[qword 0xffffffffcccccccc]
+ mov bx,[qword 0xffffffffcccccccc]
+ mov eax,[qword 0xffffffffcccccccc]
+ mov ebx,[qword 0xffffffffcccccccc]
+ mov rax,[qword 0xffffffffcccccccc]
+ mov rbx,[qword 0xffffffffcccccccc]
+
+ mov al,[a64 foo]
+ mov bl,[a64 foo]
+ mov ax,[a64 foo]
+ mov bx,[a64 foo]
+ mov eax,[a64 foo]
+ mov ebx,[a64 foo]
+ mov rax,[a64 foo]
+ mov rbx,[a64 foo]
+ mov al,[a64 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 0xbbbbbbbb]
+ mov bl,[a64 0xbbbbbbbb]
+ mov ax,[a64 0xbbbbbbbb]
+ mov bx,[a64 0xbbbbbbbb]
+ mov eax,[a64 0xbbbbbbbb]
+ mov ebx,[a64 0xbbbbbbbb]
+ mov rax,[a64 0xbbbbbbbb]
+ mov rbx,[a64 0xbbbbbbbb]
+ mov al,[a64 0xffffffffcccccccc]
+ mov bl,[a64 0xffffffffcccccccc]
+ mov ax,[a64 0xffffffffcccccccc]
+ mov bx,[a64 0xffffffffcccccccc]
+ mov eax,[a64 0xffffffffcccccccc]
+ mov ebx,[a64 0xffffffffcccccccc]
+ mov rax,[a64 0xffffffffcccccccc]
+ mov rbx,[a64 0xffffffffcccccccc]
+
+ mov al,[a64 dword foo]
+ mov bl,[a64 dword foo]
+ mov ax,[a64 dword foo]
+ mov bx,[a64 dword foo]
+ mov eax,[a64 dword foo]
+ mov ebx,[a64 dword foo]
+ mov rax,[a64 dword foo]
+ mov rbx,[a64 dword foo]
+ mov al,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 dword 0xbbbbbbbb]
+ mov bl,[a64 dword 0xbbbbbbbb]
+ mov ax,[a64 dword 0xbbbbbbbb]
+ mov bx,[a64 dword 0xbbbbbbbb]
+ mov eax,[a64 dword 0xbbbbbbbb]
+ mov ebx,[a64 dword 0xbbbbbbbb]
+ mov rax,[a64 dword 0xbbbbbbbb]
+ mov rbx,[a64 dword 0xbbbbbbbb]
+ mov al,[a64 dword 0xffffffffcccccccc]
+ mov bl,[a64 dword 0xffffffffcccccccc]
+ mov ax,[a64 dword 0xffffffffcccccccc]
+ mov bx,[a64 dword 0xffffffffcccccccc]
+ mov eax,[a64 dword 0xffffffffcccccccc]
+ mov ebx,[a64 dword 0xffffffffcccccccc]
+ mov rax,[a64 dword 0xffffffffcccccccc]
+ mov rbx,[a64 dword 0xffffffffcccccccc]
+
+ mov al,[a64 qword foo]
+ mov bl,[a64 qword foo]
+ mov ax,[a64 qword foo]
+ mov bx,[a64 qword foo]
+ mov eax,[a64 qword foo]
+ mov ebx,[a64 qword foo]
+ mov rax,[a64 qword foo]
+ mov rbx,[a64 qword foo]
+ mov al,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 qword 0xbbbbbbbb]
+ mov bl,[a64 qword 0xbbbbbbbb]
+ mov ax,[a64 qword 0xbbbbbbbb]
+ mov bx,[a64 qword 0xbbbbbbbb]
+ mov eax,[a64 qword 0xbbbbbbbb]
+ mov ebx,[a64 qword 0xbbbbbbbb]
+ mov rax,[a64 qword 0xbbbbbbbb]
+ mov rbx,[a64 qword 0xbbbbbbbb]
+ mov al,[a64 qword 0xffffffffcccccccc]
+ mov bl,[a64 qword 0xffffffffcccccccc]
+ mov ax,[a64 qword 0xffffffffcccccccc]
+ mov bx,[a64 qword 0xffffffffcccccccc]
+ mov eax,[a64 qword 0xffffffffcccccccc]
+ mov ebx,[a64 qword 0xffffffffcccccccc]
+ mov rax,[a64 qword 0xffffffffcccccccc]
+ mov rbx,[a64 qword 0xffffffffcccccccc]
+
+ mov al,[a32 foo]
+ mov bl,[a32 foo]
+ mov ax,[a32 foo]
+ mov bx,[a32 foo]
+ mov eax,[a32 foo]
+ mov ebx,[a32 foo]
+ mov rax,[a32 foo]
+ mov rbx,[a32 foo]
+ mov al,[a32 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 0xbbbbbbbb]
+ mov bl,[a32 0xbbbbbbbb]
+ mov ax,[a32 0xbbbbbbbb]
+ mov bx,[a32 0xbbbbbbbb]
+ mov eax,[a32 0xbbbbbbbb]
+ mov ebx,[a32 0xbbbbbbbb]
+ mov rax,[a32 0xbbbbbbbb]
+ mov rbx,[a32 0xbbbbbbbb]
+ mov al,[a32 0xffffffffcccccccc]
+ mov bl,[a32 0xffffffffcccccccc]
+ mov ax,[a32 0xffffffffcccccccc]
+ mov bx,[a32 0xffffffffcccccccc]
+ mov eax,[a32 0xffffffffcccccccc]
+ mov ebx,[a32 0xffffffffcccccccc]
+ mov rax,[a32 0xffffffffcccccccc]
+ mov rbx,[a32 0xffffffffcccccccc]
+
+ mov al,[a32 dword foo]
+ mov bl,[a32 dword foo]
+ mov ax,[a32 dword foo]
+ mov bx,[a32 dword foo]
+ mov eax,[a32 dword foo]
+ mov ebx,[a32 dword foo]
+ mov rax,[a32 dword foo]
+ mov rbx,[a32 dword foo]
+ mov al,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 dword 0xbbbbbbbb]
+ mov bl,[a32 dword 0xbbbbbbbb]
+ mov ax,[a32 dword 0xbbbbbbbb]
+ mov bx,[a32 dword 0xbbbbbbbb]
+ mov eax,[a32 dword 0xbbbbbbbb]
+ mov ebx,[a32 dword 0xbbbbbbbb]
+ mov rax,[a32 dword 0xbbbbbbbb]
+ mov rbx,[a32 dword 0xbbbbbbbb]
+ mov al,[a32 dword 0xffffffffcccccccc]
+ mov bl,[a32 dword 0xffffffffcccccccc]
+ mov ax,[a32 dword 0xffffffffcccccccc]
+ mov bx,[a32 dword 0xffffffffcccccccc]
+ mov eax,[a32 dword 0xffffffffcccccccc]
+ mov ebx,[a32 dword 0xffffffffcccccccc]
+ mov rax,[a32 dword 0xffffffffcccccccc]
+ mov rbx,[a32 dword 0xffffffffcccccccc]
+
+ mov al,[a32 qword foo]
+ mov bl,[a32 qword foo]
+ mov ax,[a32 qword foo]
+ mov bx,[a32 qword foo]
+ mov eax,[a32 qword foo]
+ mov ebx,[a32 qword foo]
+ mov rax,[a32 qword foo]
+ mov rbx,[a32 qword foo]
+ mov al,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 qword 0xbbbbbbbb]
+ mov bl,[a32 qword 0xbbbbbbbb]
+ mov ax,[a32 qword 0xbbbbbbbb]
+ mov bx,[a32 qword 0xbbbbbbbb]
+ mov eax,[a32 qword 0xbbbbbbbb]
+ mov ebx,[a32 qword 0xbbbbbbbb]
+ mov rax,[a32 qword 0xbbbbbbbb]
+ mov rbx,[a32 qword 0xbbbbbbbb]
+ mov al,[a32 qword 0xffffffffcccccccc]
+ mov bl,[a32 qword 0xffffffffcccccccc]
+ mov ax,[a32 qword 0xffffffffcccccccc]
+ mov bx,[a32 qword 0xffffffffcccccccc]
+ mov eax,[a32 qword 0xffffffffcccccccc]
+ mov ebx,[a32 qword 0xffffffffcccccccc]
+ mov rax,[a32 qword 0xffffffffcccccccc]
+ mov rbx,[a32 qword 0xffffffffcccccccc]
+
+ mov al,[abs foo]
+ mov bl,[abs foo]
+ mov ax,[abs foo]
+ mov bx,[abs foo]
+ mov eax,[abs foo]
+ mov ebx,[abs foo]
+ mov rax,[abs foo]
+ mov rbx,[abs foo]
+ mov al,[abs 0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs 0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs 0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs 0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs 0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs 0xaaaaaaaaaaaaaaaa]
+ mov al,[abs 0xbbbbbbbb]
+ mov bl,[abs 0xbbbbbbbb]
+ mov ax,[abs 0xbbbbbbbb]
+ mov bx,[abs 0xbbbbbbbb]
+ mov eax,[abs 0xbbbbbbbb]
+ mov ebx,[abs 0xbbbbbbbb]
+ mov rax,[abs 0xbbbbbbbb]
+ mov rbx,[abs 0xbbbbbbbb]
+ mov al,[abs 0xffffffffcccccccc]
+ mov bl,[abs 0xffffffffcccccccc]
+ mov ax,[abs 0xffffffffcccccccc]
+ mov bx,[abs 0xffffffffcccccccc]
+ mov eax,[abs 0xffffffffcccccccc]
+ mov ebx,[abs 0xffffffffcccccccc]
+ mov rax,[abs 0xffffffffcccccccc]
+ mov rbx,[abs 0xffffffffcccccccc]
+
+ mov al,[abs dword foo]
+ mov bl,[abs dword foo]
+ mov ax,[abs dword foo]
+ mov bx,[abs dword foo]
+ mov eax,[abs dword foo]
+ mov ebx,[abs dword foo]
+ mov rax,[abs dword foo]
+ mov rbx,[abs dword foo]
+ mov al,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[abs dword 0xbbbbbbbb]
+ mov bl,[abs dword 0xbbbbbbbb]
+ mov ax,[abs dword 0xbbbbbbbb]
+ mov bx,[abs dword 0xbbbbbbbb]
+ mov eax,[abs dword 0xbbbbbbbb]
+ mov ebx,[abs dword 0xbbbbbbbb]
+ mov rax,[abs dword 0xbbbbbbbb]
+ mov rbx,[abs dword 0xbbbbbbbb]
+ mov al,[abs dword 0xffffffffcccccccc]
+ mov bl,[abs dword 0xffffffffcccccccc]
+ mov ax,[abs dword 0xffffffffcccccccc]
+ mov bx,[abs dword 0xffffffffcccccccc]
+ mov eax,[abs dword 0xffffffffcccccccc]
+ mov ebx,[abs dword 0xffffffffcccccccc]
+ mov rax,[abs dword 0xffffffffcccccccc]
+ mov rbx,[abs dword 0xffffffffcccccccc]
+
+ mov al,[abs qword foo]
+ mov bl,[abs qword foo]
+ mov ax,[abs qword foo]
+ mov bx,[abs qword foo]
+ mov eax,[abs qword foo]
+ mov ebx,[abs qword foo]
+ mov rax,[abs qword foo]
+ mov rbx,[abs qword foo]
+ mov al,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[abs qword 0xbbbbbbbb]
+ mov bl,[abs qword 0xbbbbbbbb]
+ mov ax,[abs qword 0xbbbbbbbb]
+ mov bx,[abs qword 0xbbbbbbbb]
+ mov eax,[abs qword 0xbbbbbbbb]
+ mov ebx,[abs qword 0xbbbbbbbb]
+ mov rax,[abs qword 0xbbbbbbbb]
+ mov rbx,[abs qword 0xbbbbbbbb]
+ mov al,[abs qword 0xffffffffcccccccc]
+ mov bl,[abs qword 0xffffffffcccccccc]
+ mov ax,[abs qword 0xffffffffcccccccc]
+ mov bx,[abs qword 0xffffffffcccccccc]
+ mov eax,[abs qword 0xffffffffcccccccc]
+ mov ebx,[abs qword 0xffffffffcccccccc]
+ mov rax,[abs qword 0xffffffffcccccccc]
+ mov rbx,[abs qword 0xffffffffcccccccc]
+
+ mov al,[a64 abs foo]
+ mov bl,[a64 abs foo]
+ mov ax,[a64 abs foo]
+ mov bx,[a64 abs foo]
+ mov eax,[a64 abs foo]
+ mov ebx,[a64 abs foo]
+ mov rax,[a64 abs foo]
+ mov rbx,[a64 abs foo]
+ mov al,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs 0xbbbbbbbb]
+ mov bl,[a64 abs 0xbbbbbbbb]
+ mov ax,[a64 abs 0xbbbbbbbb]
+ mov bx,[a64 abs 0xbbbbbbbb]
+ mov eax,[a64 abs 0xbbbbbbbb]
+ mov ebx,[a64 abs 0xbbbbbbbb]
+ mov rax,[a64 abs 0xbbbbbbbb]
+ mov rbx,[a64 abs 0xbbbbbbbb]
+ mov al,[a64 abs 0xffffffffcccccccc]
+ mov bl,[a64 abs 0xffffffffcccccccc]
+ mov ax,[a64 abs 0xffffffffcccccccc]
+ mov bx,[a64 abs 0xffffffffcccccccc]
+ mov eax,[a64 abs 0xffffffffcccccccc]
+ mov ebx,[a64 abs 0xffffffffcccccccc]
+ mov rax,[a64 abs 0xffffffffcccccccc]
+ mov rbx,[a64 abs 0xffffffffcccccccc]
+
+ mov al,[a64 abs dword foo]
+ mov bl,[a64 abs dword foo]
+ mov ax,[a64 abs dword foo]
+ mov bx,[a64 abs dword foo]
+ mov eax,[a64 abs dword foo]
+ mov ebx,[a64 abs dword foo]
+ mov rax,[a64 abs dword foo]
+ mov rbx,[a64 abs dword foo]
+ mov al,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs dword 0xbbbbbbbb]
+ mov bl,[a64 abs dword 0xbbbbbbbb]
+ mov ax,[a64 abs dword 0xbbbbbbbb]
+ mov bx,[a64 abs dword 0xbbbbbbbb]
+ mov eax,[a64 abs dword 0xbbbbbbbb]
+ mov ebx,[a64 abs dword 0xbbbbbbbb]
+ mov rax,[a64 abs dword 0xbbbbbbbb]
+ mov rbx,[a64 abs dword 0xbbbbbbbb]
+ mov al,[a64 abs dword 0xffffffffcccccccc]
+ mov bl,[a64 abs dword 0xffffffffcccccccc]
+ mov ax,[a64 abs dword 0xffffffffcccccccc]
+ mov bx,[a64 abs dword 0xffffffffcccccccc]
+ mov eax,[a64 abs dword 0xffffffffcccccccc]
+ mov ebx,[a64 abs dword 0xffffffffcccccccc]
+ mov rax,[a64 abs dword 0xffffffffcccccccc]
+ mov rbx,[a64 abs dword 0xffffffffcccccccc]
+
+ mov al,[a64 abs qword foo]
+ mov bl,[a64 abs qword foo]
+ mov ax,[a64 abs qword foo]
+ mov bx,[a64 abs qword foo]
+ mov eax,[a64 abs qword foo]
+ mov ebx,[a64 abs qword foo]
+ mov rax,[a64 abs qword foo]
+ mov rbx,[a64 abs qword foo]
+ mov al,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs qword 0xbbbbbbbb]
+ mov bl,[a64 abs qword 0xbbbbbbbb]
+ mov ax,[a64 abs qword 0xbbbbbbbb]
+ mov bx,[a64 abs qword 0xbbbbbbbb]
+ mov eax,[a64 abs qword 0xbbbbbbbb]
+ mov ebx,[a64 abs qword 0xbbbbbbbb]
+ mov rax,[a64 abs qword 0xbbbbbbbb]
+ mov rbx,[a64 abs qword 0xbbbbbbbb]
+ mov al,[a64 abs qword 0xffffffffcccccccc]
+ mov bl,[a64 abs qword 0xffffffffcccccccc]
+ mov ax,[a64 abs qword 0xffffffffcccccccc]
+ mov bx,[a64 abs qword 0xffffffffcccccccc]
+ mov eax,[a64 abs qword 0xffffffffcccccccc]
+ mov ebx,[a64 abs qword 0xffffffffcccccccc]
+ mov rax,[a64 abs qword 0xffffffffcccccccc]
+ mov rbx,[a64 abs qword 0xffffffffcccccccc]
+
+ mov al,[a32 abs foo]
+ mov bl,[a32 abs foo]
+ mov ax,[a32 abs foo]
+ mov bx,[a32 abs foo]
+ mov eax,[a32 abs foo]
+ mov ebx,[a32 abs foo]
+ mov rax,[a32 abs foo]
+ mov rbx,[a32 abs foo]
+ mov al,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs 0xbbbbbbbb]
+ mov bl,[a32 abs 0xbbbbbbbb]
+ mov ax,[a32 abs 0xbbbbbbbb]
+ mov bx,[a32 abs 0xbbbbbbbb]
+ mov eax,[a32 abs 0xbbbbbbbb]
+ mov ebx,[a32 abs 0xbbbbbbbb]
+ mov rax,[a32 abs 0xbbbbbbbb]
+ mov rbx,[a32 abs 0xbbbbbbbb]
+ mov al,[a32 abs 0xffffffffcccccccc]
+ mov bl,[a32 abs 0xffffffffcccccccc]
+ mov ax,[a32 abs 0xffffffffcccccccc]
+ mov bx,[a32 abs 0xffffffffcccccccc]
+ mov eax,[a32 abs 0xffffffffcccccccc]
+ mov ebx,[a32 abs 0xffffffffcccccccc]
+ mov rax,[a32 abs 0xffffffffcccccccc]
+ mov rbx,[a32 abs 0xffffffffcccccccc]
+
+ mov al,[a32 abs dword foo]
+ mov bl,[a32 abs dword foo]
+ mov ax,[a32 abs dword foo]
+ mov bx,[a32 abs dword foo]
+ mov eax,[a32 abs dword foo]
+ mov ebx,[a32 abs dword foo]
+ mov rax,[a32 abs dword foo]
+ mov rbx,[a32 abs dword foo]
+ mov al,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs dword 0xbbbbbbbb]
+ mov bl,[a32 abs dword 0xbbbbbbbb]
+ mov ax,[a32 abs dword 0xbbbbbbbb]
+ mov bx,[a32 abs dword 0xbbbbbbbb]
+ mov eax,[a32 abs dword 0xbbbbbbbb]
+ mov ebx,[a32 abs dword 0xbbbbbbbb]
+ mov rax,[a32 abs dword 0xbbbbbbbb]
+ mov rbx,[a32 abs dword 0xbbbbbbbb]
+ mov al,[a32 abs dword 0xffffffffcccccccc]
+ mov bl,[a32 abs dword 0xffffffffcccccccc]
+ mov ax,[a32 abs dword 0xffffffffcccccccc]
+ mov bx,[a32 abs dword 0xffffffffcccccccc]
+ mov eax,[a32 abs dword 0xffffffffcccccccc]
+ mov ebx,[a32 abs dword 0xffffffffcccccccc]
+ mov rax,[a32 abs dword 0xffffffffcccccccc]
+ mov rbx,[a32 abs dword 0xffffffffcccccccc]
+
+ mov al,[a32 abs qword foo]
+ mov bl,[a32 abs qword foo]
+ mov ax,[a32 abs qword foo]
+ mov bx,[a32 abs qword foo]
+ mov eax,[a32 abs qword foo]
+ mov ebx,[a32 abs qword foo]
+ mov rax,[a32 abs qword foo]
+ mov rbx,[a32 abs qword foo]
+ mov al,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs qword 0xbbbbbbbb]
+ mov bl,[a32 abs qword 0xbbbbbbbb]
+ mov ax,[a32 abs qword 0xbbbbbbbb]
+ mov bx,[a32 abs qword 0xbbbbbbbb]
+ mov eax,[a32 abs qword 0xbbbbbbbb]
+ mov ebx,[a32 abs qword 0xbbbbbbbb]
+ mov rax,[a32 abs qword 0xbbbbbbbb]
+ mov rbx,[a32 abs qword 0xbbbbbbbb]
+ mov al,[a32 abs qword 0xffffffffcccccccc]
+ mov bl,[a32 abs qword 0xffffffffcccccccc]
+ mov ax,[a32 abs qword 0xffffffffcccccccc]
+ mov bx,[a32 abs qword 0xffffffffcccccccc]
+ mov eax,[a32 abs qword 0xffffffffcccccccc]
+ mov ebx,[a32 abs qword 0xffffffffcccccccc]
+ mov rax,[a32 abs qword 0xffffffffcccccccc]
+ mov rbx,[a32 abs qword 0xffffffffcccccccc]
+
+ mov al,[rel foo]
+ mov bl,[rel foo]
+ mov ax,[rel foo]
+ mov bx,[rel foo]
+ mov eax,[rel foo]
+ mov ebx,[rel foo]
+ mov rax,[rel foo]
+ mov rbx,[rel foo]
+ mov al,[rel 0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel 0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel 0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel 0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel 0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel 0xaaaaaaaaaaaaaaaa]
+ mov al,[rel 0xbbbbbbbb]
+ mov bl,[rel 0xbbbbbbbb]
+ mov ax,[rel 0xbbbbbbbb]
+ mov bx,[rel 0xbbbbbbbb]
+ mov eax,[rel 0xbbbbbbbb]
+ mov ebx,[rel 0xbbbbbbbb]
+ mov rax,[rel 0xbbbbbbbb]
+ mov rbx,[rel 0xbbbbbbbb]
+ mov al,[rel 0xffffffffcccccccc]
+ mov bl,[rel 0xffffffffcccccccc]
+ mov ax,[rel 0xffffffffcccccccc]
+ mov bx,[rel 0xffffffffcccccccc]
+ mov eax,[rel 0xffffffffcccccccc]
+ mov ebx,[rel 0xffffffffcccccccc]
+ mov rax,[rel 0xffffffffcccccccc]
+ mov rbx,[rel 0xffffffffcccccccc]
+
+ mov al,[rel dword foo]
+ mov bl,[rel dword foo]
+ mov ax,[rel dword foo]
+ mov bx,[rel dword foo]
+ mov eax,[rel dword foo]
+ mov ebx,[rel dword foo]
+ mov rax,[rel dword foo]
+ mov rbx,[rel dword foo]
+ mov al,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[rel dword 0xbbbbbbbb]
+ mov bl,[rel dword 0xbbbbbbbb]
+ mov ax,[rel dword 0xbbbbbbbb]
+ mov bx,[rel dword 0xbbbbbbbb]
+ mov eax,[rel dword 0xbbbbbbbb]
+ mov ebx,[rel dword 0xbbbbbbbb]
+ mov rax,[rel dword 0xbbbbbbbb]
+ mov rbx,[rel dword 0xbbbbbbbb]
+ mov al,[rel dword 0xffffffffcccccccc]
+ mov bl,[rel dword 0xffffffffcccccccc]
+ mov ax,[rel dword 0xffffffffcccccccc]
+ mov bx,[rel dword 0xffffffffcccccccc]
+ mov eax,[rel dword 0xffffffffcccccccc]
+ mov ebx,[rel dword 0xffffffffcccccccc]
+ mov rax,[rel dword 0xffffffffcccccccc]
+ mov rbx,[rel dword 0xffffffffcccccccc]
+
+ mov al,[rel qword foo]
+ mov bl,[rel qword foo]
+ mov ax,[rel qword foo]
+ mov bx,[rel qword foo]
+ mov eax,[rel qword foo]
+ mov ebx,[rel qword foo]
+ mov rax,[rel qword foo]
+ mov rbx,[rel qword foo]
+ mov al,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[rel qword 0xbbbbbbbb]
+ mov bl,[rel qword 0xbbbbbbbb]
+ mov ax,[rel qword 0xbbbbbbbb]
+ mov bx,[rel qword 0xbbbbbbbb]
+ mov eax,[rel qword 0xbbbbbbbb]
+ mov ebx,[rel qword 0xbbbbbbbb]
+ mov rax,[rel qword 0xbbbbbbbb]
+ mov rbx,[rel qword 0xbbbbbbbb]
+ mov al,[rel qword 0xffffffffcccccccc]
+ mov bl,[rel qword 0xffffffffcccccccc]
+ mov ax,[rel qword 0xffffffffcccccccc]
+ mov bx,[rel qword 0xffffffffcccccccc]
+ mov eax,[rel qword 0xffffffffcccccccc]
+ mov ebx,[rel qword 0xffffffffcccccccc]
+ mov rax,[rel qword 0xffffffffcccccccc]
+ mov rbx,[rel qword 0xffffffffcccccccc]
+
+ mov al,[a64 rel foo]
+ mov bl,[a64 rel foo]
+ mov ax,[a64 rel foo]
+ mov bx,[a64 rel foo]
+ mov eax,[a64 rel foo]
+ mov ebx,[a64 rel foo]
+ mov rax,[a64 rel foo]
+ mov rbx,[a64 rel foo]
+ mov al,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel 0xbbbbbbbb]
+ mov bl,[a64 rel 0xbbbbbbbb]
+ mov ax,[a64 rel 0xbbbbbbbb]
+ mov bx,[a64 rel 0xbbbbbbbb]
+ mov eax,[a64 rel 0xbbbbbbbb]
+ mov ebx,[a64 rel 0xbbbbbbbb]
+ mov rax,[a64 rel 0xbbbbbbbb]
+ mov rbx,[a64 rel 0xbbbbbbbb]
+ mov al,[a64 rel 0xffffffffcccccccc]
+ mov bl,[a64 rel 0xffffffffcccccccc]
+ mov ax,[a64 rel 0xffffffffcccccccc]
+ mov bx,[a64 rel 0xffffffffcccccccc]
+ mov eax,[a64 rel 0xffffffffcccccccc]
+ mov ebx,[a64 rel 0xffffffffcccccccc]
+ mov rax,[a64 rel 0xffffffffcccccccc]
+ mov rbx,[a64 rel 0xffffffffcccccccc]
+
+ mov al,[a64 rel dword foo]
+ mov bl,[a64 rel dword foo]
+ mov ax,[a64 rel dword foo]
+ mov bx,[a64 rel dword foo]
+ mov eax,[a64 rel dword foo]
+ mov ebx,[a64 rel dword foo]
+ mov rax,[a64 rel dword foo]
+ mov rbx,[a64 rel dword foo]
+ mov al,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel dword 0xbbbbbbbb]
+ mov bl,[a64 rel dword 0xbbbbbbbb]
+ mov ax,[a64 rel dword 0xbbbbbbbb]
+ mov bx,[a64 rel dword 0xbbbbbbbb]
+ mov eax,[a64 rel dword 0xbbbbbbbb]
+ mov ebx,[a64 rel dword 0xbbbbbbbb]
+ mov rax,[a64 rel dword 0xbbbbbbbb]
+ mov rbx,[a64 rel dword 0xbbbbbbbb]
+ mov al,[a64 rel dword 0xffffffffcccccccc]
+ mov bl,[a64 rel dword 0xffffffffcccccccc]
+ mov ax,[a64 rel dword 0xffffffffcccccccc]
+ mov bx,[a64 rel dword 0xffffffffcccccccc]
+ mov eax,[a64 rel dword 0xffffffffcccccccc]
+ mov ebx,[a64 rel dword 0xffffffffcccccccc]
+ mov rax,[a64 rel dword 0xffffffffcccccccc]
+ mov rbx,[a64 rel dword 0xffffffffcccccccc]
+
+ mov al,[a64 rel qword foo]
+ mov bl,[a64 rel qword foo]
+ mov ax,[a64 rel qword foo]
+ mov bx,[a64 rel qword foo]
+ mov eax,[a64 rel qword foo]
+ mov ebx,[a64 rel qword foo]
+ mov rax,[a64 rel qword foo]
+ mov rbx,[a64 rel qword foo]
+ mov al,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel qword 0xbbbbbbbb]
+ mov bl,[a64 rel qword 0xbbbbbbbb]
+ mov ax,[a64 rel qword 0xbbbbbbbb]
+ mov bx,[a64 rel qword 0xbbbbbbbb]
+ mov eax,[a64 rel qword 0xbbbbbbbb]
+ mov ebx,[a64 rel qword 0xbbbbbbbb]
+ mov rax,[a64 rel qword 0xbbbbbbbb]
+ mov rbx,[a64 rel qword 0xbbbbbbbb]
+ mov al,[a64 rel qword 0xffffffffcccccccc]
+ mov bl,[a64 rel qword 0xffffffffcccccccc]
+ mov ax,[a64 rel qword 0xffffffffcccccccc]
+ mov bx,[a64 rel qword 0xffffffffcccccccc]
+ mov eax,[a64 rel qword 0xffffffffcccccccc]
+ mov ebx,[a64 rel qword 0xffffffffcccccccc]
+ mov rax,[a64 rel qword 0xffffffffcccccccc]
+ mov rbx,[a64 rel qword 0xffffffffcccccccc]
+
+ mov al,[a32 rel foo]
+ mov bl,[a32 rel foo]
+ mov ax,[a32 rel foo]
+ mov bx,[a32 rel foo]
+ mov eax,[a32 rel foo]
+ mov ebx,[a32 rel foo]
+ mov rax,[a32 rel foo]
+ mov rbx,[a32 rel foo]
+ mov al,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel 0xbbbbbbbb]
+ mov bl,[a32 rel 0xbbbbbbbb]
+ mov ax,[a32 rel 0xbbbbbbbb]
+ mov bx,[a32 rel 0xbbbbbbbb]
+ mov eax,[a32 rel 0xbbbbbbbb]
+ mov ebx,[a32 rel 0xbbbbbbbb]
+ mov rax,[a32 rel 0xbbbbbbbb]
+ mov rbx,[a32 rel 0xbbbbbbbb]
+ mov al,[a32 rel 0xffffffffcccccccc]
+ mov bl,[a32 rel 0xffffffffcccccccc]
+ mov ax,[a32 rel 0xffffffffcccccccc]
+ mov bx,[a32 rel 0xffffffffcccccccc]
+ mov eax,[a32 rel 0xffffffffcccccccc]
+ mov ebx,[a32 rel 0xffffffffcccccccc]
+ mov rax,[a32 rel 0xffffffffcccccccc]
+ mov rbx,[a32 rel 0xffffffffcccccccc]
+
+ mov al,[a32 rel dword foo]
+ mov bl,[a32 rel dword foo]
+ mov ax,[a32 rel dword foo]
+ mov bx,[a32 rel dword foo]
+ mov eax,[a32 rel dword foo]
+ mov ebx,[a32 rel dword foo]
+ mov rax,[a32 rel dword foo]
+ mov rbx,[a32 rel dword foo]
+ mov al,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel dword 0xbbbbbbbb]
+ mov bl,[a32 rel dword 0xbbbbbbbb]
+ mov ax,[a32 rel dword 0xbbbbbbbb]
+ mov bx,[a32 rel dword 0xbbbbbbbb]
+ mov eax,[a32 rel dword 0xbbbbbbbb]
+ mov ebx,[a32 rel dword 0xbbbbbbbb]
+ mov rax,[a32 rel dword 0xbbbbbbbb]
+ mov rbx,[a32 rel dword 0xbbbbbbbb]
+ mov al,[a32 rel dword 0xffffffffcccccccc]
+ mov bl,[a32 rel dword 0xffffffffcccccccc]
+ mov ax,[a32 rel dword 0xffffffffcccccccc]
+ mov bx,[a32 rel dword 0xffffffffcccccccc]
+ mov eax,[a32 rel dword 0xffffffffcccccccc]
+ mov ebx,[a32 rel dword 0xffffffffcccccccc]
+ mov rax,[a32 rel dword 0xffffffffcccccccc]
+ mov rbx,[a32 rel dword 0xffffffffcccccccc]
+
+ mov al,[a32 rel qword foo]
+ mov bl,[a32 rel qword foo]
+ mov ax,[a32 rel qword foo]
+ mov bx,[a32 rel qword foo]
+ mov eax,[a32 rel qword foo]
+ mov ebx,[a32 rel qword foo]
+ mov rax,[a32 rel qword foo]
+ mov rbx,[a32 rel qword foo]
+ mov al,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel qword 0xbbbbbbbb]
+ mov bl,[a32 rel qword 0xbbbbbbbb]
+ mov ax,[a32 rel qword 0xbbbbbbbb]
+ mov bx,[a32 rel qword 0xbbbbbbbb]
+ mov eax,[a32 rel qword 0xbbbbbbbb]
+ mov ebx,[a32 rel qword 0xbbbbbbbb]
+ mov rax,[a32 rel qword 0xbbbbbbbb]
+ mov rbx,[a32 rel qword 0xbbbbbbbb]
+ mov al,[a32 rel qword 0xffffffffcccccccc]
+ mov bl,[a32 rel qword 0xffffffffcccccccc]
+ mov ax,[a32 rel qword 0xffffffffcccccccc]
+ mov bx,[a32 rel qword 0xffffffffcccccccc]
+ mov eax,[a32 rel qword 0xffffffffcccccccc]
+ mov ebx,[a32 rel qword 0xffffffffcccccccc]
+ mov rax,[a32 rel qword 0xffffffffcccccccc]
+ mov rbx,[a32 rel qword 0xffffffffcccccccc]
+
+ mov al,[fs:foo]
+ mov bl,[fs:foo]
+ mov ax,[fs:foo]
+ mov bx,[fs:foo]
+ mov eax,[fs:foo]
+ mov ebx,[fs:foo]
+ mov rax,[fs:foo]
+ mov rbx,[fs:foo]
+ mov al,[fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[fs:0xbbbbbbbb]
+ mov bl,[fs:0xbbbbbbbb]
+ mov ax,[fs:0xbbbbbbbb]
+ mov bx,[fs:0xbbbbbbbb]
+ mov eax,[fs:0xbbbbbbbb]
+ mov ebx,[fs:0xbbbbbbbb]
+ mov rax,[fs:0xbbbbbbbb]
+ mov rbx,[fs:0xbbbbbbbb]
+ mov al,[fs:0xffffffffcccccccc]
+ mov bl,[fs:0xffffffffcccccccc]
+ mov ax,[fs:0xffffffffcccccccc]
+ mov bx,[fs:0xffffffffcccccccc]
+ mov eax,[fs:0xffffffffcccccccc]
+ mov ebx,[fs:0xffffffffcccccccc]
+ mov rax,[fs:0xffffffffcccccccc]
+ mov rbx,[fs:0xffffffffcccccccc]
+
+ mov al,[dword fs:foo]
+ mov bl,[dword fs:foo]
+ mov ax,[dword fs:foo]
+ mov bx,[dword fs:foo]
+ mov eax,[dword fs:foo]
+ mov ebx,[dword fs:foo]
+ mov rax,[dword fs:foo]
+ mov rbx,[dword fs:foo]
+ mov al,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[dword fs:0xbbbbbbbb]
+ mov bl,[dword fs:0xbbbbbbbb]
+ mov ax,[dword fs:0xbbbbbbbb]
+ mov bx,[dword fs:0xbbbbbbbb]
+ mov eax,[dword fs:0xbbbbbbbb]
+ mov ebx,[dword fs:0xbbbbbbbb]
+ mov rax,[dword fs:0xbbbbbbbb]
+ mov rbx,[dword fs:0xbbbbbbbb]
+ mov al,[dword fs:0xffffffffcccccccc]
+ mov bl,[dword fs:0xffffffffcccccccc]
+ mov ax,[dword fs:0xffffffffcccccccc]
+ mov bx,[dword fs:0xffffffffcccccccc]
+ mov eax,[dword fs:0xffffffffcccccccc]
+ mov ebx,[dword fs:0xffffffffcccccccc]
+ mov rax,[dword fs:0xffffffffcccccccc]
+ mov rbx,[dword fs:0xffffffffcccccccc]
+
+ mov al,[qword fs:foo]
+ mov bl,[qword fs:foo]
+ mov ax,[qword fs:foo]
+ mov bx,[qword fs:foo]
+ mov eax,[qword fs:foo]
+ mov ebx,[qword fs:foo]
+ mov rax,[qword fs:foo]
+ mov rbx,[qword fs:foo]
+ mov al,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[qword fs:0xbbbbbbbb]
+ mov bl,[qword fs:0xbbbbbbbb]
+ mov ax,[qword fs:0xbbbbbbbb]
+ mov bx,[qword fs:0xbbbbbbbb]
+ mov eax,[qword fs:0xbbbbbbbb]
+ mov ebx,[qword fs:0xbbbbbbbb]
+ mov rax,[qword fs:0xbbbbbbbb]
+ mov rbx,[qword fs:0xbbbbbbbb]
+ mov al,[qword fs:0xffffffffcccccccc]
+ mov bl,[qword fs:0xffffffffcccccccc]
+ mov ax,[qword fs:0xffffffffcccccccc]
+ mov bx,[qword fs:0xffffffffcccccccc]
+ mov eax,[qword fs:0xffffffffcccccccc]
+ mov ebx,[qword fs:0xffffffffcccccccc]
+ mov rax,[qword fs:0xffffffffcccccccc]
+ mov rbx,[qword fs:0xffffffffcccccccc]
+
+ mov al,[a64 fs:foo]
+ mov bl,[a64 fs:foo]
+ mov ax,[a64 fs:foo]
+ mov bx,[a64 fs:foo]
+ mov eax,[a64 fs:foo]
+ mov ebx,[a64 fs:foo]
+ mov rax,[a64 fs:foo]
+ mov rbx,[a64 fs:foo]
+ mov al,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 fs:0xbbbbbbbb]
+ mov bl,[a64 fs:0xbbbbbbbb]
+ mov ax,[a64 fs:0xbbbbbbbb]
+ mov bx,[a64 fs:0xbbbbbbbb]
+ mov eax,[a64 fs:0xbbbbbbbb]
+ mov ebx,[a64 fs:0xbbbbbbbb]
+ mov rax,[a64 fs:0xbbbbbbbb]
+ mov rbx,[a64 fs:0xbbbbbbbb]
+ mov al,[a64 fs:0xffffffffcccccccc]
+ mov bl,[a64 fs:0xffffffffcccccccc]
+ mov ax,[a64 fs:0xffffffffcccccccc]
+ mov bx,[a64 fs:0xffffffffcccccccc]
+ mov eax,[a64 fs:0xffffffffcccccccc]
+ mov ebx,[a64 fs:0xffffffffcccccccc]
+ mov rax,[a64 fs:0xffffffffcccccccc]
+ mov rbx,[a64 fs:0xffffffffcccccccc]
+
+ mov al,[a64 dword fs:foo]
+ mov bl,[a64 dword fs:foo]
+ mov ax,[a64 dword fs:foo]
+ mov bx,[a64 dword fs:foo]
+ mov eax,[a64 dword fs:foo]
+ mov ebx,[a64 dword fs:foo]
+ mov rax,[a64 dword fs:foo]
+ mov rbx,[a64 dword fs:foo]
+ mov al,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 dword fs:0xbbbbbbbb]
+ mov bl,[a64 dword fs:0xbbbbbbbb]
+ mov ax,[a64 dword fs:0xbbbbbbbb]
+ mov bx,[a64 dword fs:0xbbbbbbbb]
+ mov eax,[a64 dword fs:0xbbbbbbbb]
+ mov ebx,[a64 dword fs:0xbbbbbbbb]
+ mov rax,[a64 dword fs:0xbbbbbbbb]
+ mov rbx,[a64 dword fs:0xbbbbbbbb]
+ mov al,[a64 dword fs:0xffffffffcccccccc]
+ mov bl,[a64 dword fs:0xffffffffcccccccc]
+ mov ax,[a64 dword fs:0xffffffffcccccccc]
+ mov bx,[a64 dword fs:0xffffffffcccccccc]
+ mov eax,[a64 dword fs:0xffffffffcccccccc]
+ mov ebx,[a64 dword fs:0xffffffffcccccccc]
+ mov rax,[a64 dword fs:0xffffffffcccccccc]
+ mov rbx,[a64 dword fs:0xffffffffcccccccc]
+
+ mov al,[a64 qword fs:foo]
+ mov bl,[a64 qword fs:foo]
+ mov ax,[a64 qword fs:foo]
+ mov bx,[a64 qword fs:foo]
+ mov eax,[a64 qword fs:foo]
+ mov ebx,[a64 qword fs:foo]
+ mov rax,[a64 qword fs:foo]
+ mov rbx,[a64 qword fs:foo]
+ mov al,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 qword fs:0xbbbbbbbb]
+ mov bl,[a64 qword fs:0xbbbbbbbb]
+ mov ax,[a64 qword fs:0xbbbbbbbb]
+ mov bx,[a64 qword fs:0xbbbbbbbb]
+ mov eax,[a64 qword fs:0xbbbbbbbb]
+ mov ebx,[a64 qword fs:0xbbbbbbbb]
+ mov rax,[a64 qword fs:0xbbbbbbbb]
+ mov rbx,[a64 qword fs:0xbbbbbbbb]
+ mov al,[a64 qword fs:0xffffffffcccccccc]
+ mov bl,[a64 qword fs:0xffffffffcccccccc]
+ mov ax,[a64 qword fs:0xffffffffcccccccc]
+ mov bx,[a64 qword fs:0xffffffffcccccccc]
+ mov eax,[a64 qword fs:0xffffffffcccccccc]
+ mov ebx,[a64 qword fs:0xffffffffcccccccc]
+ mov rax,[a64 qword fs:0xffffffffcccccccc]
+ mov rbx,[a64 qword fs:0xffffffffcccccccc]
+
+ mov al,[a32 fs:foo]
+ mov bl,[a32 fs:foo]
+ mov ax,[a32 fs:foo]
+ mov bx,[a32 fs:foo]
+ mov eax,[a32 fs:foo]
+ mov ebx,[a32 fs:foo]
+ mov rax,[a32 fs:foo]
+ mov rbx,[a32 fs:foo]
+ mov al,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 fs:0xbbbbbbbb]
+ mov bl,[a32 fs:0xbbbbbbbb]
+ mov ax,[a32 fs:0xbbbbbbbb]
+ mov bx,[a32 fs:0xbbbbbbbb]
+ mov eax,[a32 fs:0xbbbbbbbb]
+ mov ebx,[a32 fs:0xbbbbbbbb]
+ mov rax,[a32 fs:0xbbbbbbbb]
+ mov rbx,[a32 fs:0xbbbbbbbb]
+ mov al,[a32 fs:0xffffffffcccccccc]
+ mov bl,[a32 fs:0xffffffffcccccccc]
+ mov ax,[a32 fs:0xffffffffcccccccc]
+ mov bx,[a32 fs:0xffffffffcccccccc]
+ mov eax,[a32 fs:0xffffffffcccccccc]
+ mov ebx,[a32 fs:0xffffffffcccccccc]
+ mov rax,[a32 fs:0xffffffffcccccccc]
+ mov rbx,[a32 fs:0xffffffffcccccccc]
+
+ mov al,[a32 dword fs:foo]
+ mov bl,[a32 dword fs:foo]
+ mov ax,[a32 dword fs:foo]
+ mov bx,[a32 dword fs:foo]
+ mov eax,[a32 dword fs:foo]
+ mov ebx,[a32 dword fs:foo]
+ mov rax,[a32 dword fs:foo]
+ mov rbx,[a32 dword fs:foo]
+ mov al,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 dword fs:0xbbbbbbbb]
+ mov bl,[a32 dword fs:0xbbbbbbbb]
+ mov ax,[a32 dword fs:0xbbbbbbbb]
+ mov bx,[a32 dword fs:0xbbbbbbbb]
+ mov eax,[a32 dword fs:0xbbbbbbbb]
+ mov ebx,[a32 dword fs:0xbbbbbbbb]
+ mov rax,[a32 dword fs:0xbbbbbbbb]
+ mov rbx,[a32 dword fs:0xbbbbbbbb]
+ mov al,[a32 dword fs:0xffffffffcccccccc]
+ mov bl,[a32 dword fs:0xffffffffcccccccc]
+ mov ax,[a32 dword fs:0xffffffffcccccccc]
+ mov bx,[a32 dword fs:0xffffffffcccccccc]
+ mov eax,[a32 dword fs:0xffffffffcccccccc]
+ mov ebx,[a32 dword fs:0xffffffffcccccccc]
+ mov rax,[a32 dword fs:0xffffffffcccccccc]
+ mov rbx,[a32 dword fs:0xffffffffcccccccc]
+
+ mov al,[a32 qword fs:foo]
+ mov bl,[a32 qword fs:foo]
+ mov ax,[a32 qword fs:foo]
+ mov bx,[a32 qword fs:foo]
+ mov eax,[a32 qword fs:foo]
+ mov ebx,[a32 qword fs:foo]
+ mov rax,[a32 qword fs:foo]
+ mov rbx,[a32 qword fs:foo]
+ mov al,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 qword fs:0xbbbbbbbb]
+ mov bl,[a32 qword fs:0xbbbbbbbb]
+ mov ax,[a32 qword fs:0xbbbbbbbb]
+ mov bx,[a32 qword fs:0xbbbbbbbb]
+ mov eax,[a32 qword fs:0xbbbbbbbb]
+ mov ebx,[a32 qword fs:0xbbbbbbbb]
+ mov rax,[a32 qword fs:0xbbbbbbbb]
+ mov rbx,[a32 qword fs:0xbbbbbbbb]
+ mov al,[a32 qword fs:0xffffffffcccccccc]
+ mov bl,[a32 qword fs:0xffffffffcccccccc]
+ mov ax,[a32 qword fs:0xffffffffcccccccc]
+ mov bx,[a32 qword fs:0xffffffffcccccccc]
+ mov eax,[a32 qword fs:0xffffffffcccccccc]
+ mov ebx,[a32 qword fs:0xffffffffcccccccc]
+ mov rax,[a32 qword fs:0xffffffffcccccccc]
+ mov rbx,[a32 qword fs:0xffffffffcccccccc]
+
+ mov al,[abs fs:foo]
+ mov bl,[abs fs:foo]
+ mov ax,[abs fs:foo]
+ mov bx,[abs fs:foo]
+ mov eax,[abs fs:foo]
+ mov ebx,[abs fs:foo]
+ mov rax,[abs fs:foo]
+ mov rbx,[abs fs:foo]
+ mov al,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs fs:0xbbbbbbbb]
+ mov bl,[abs fs:0xbbbbbbbb]
+ mov ax,[abs fs:0xbbbbbbbb]
+ mov bx,[abs fs:0xbbbbbbbb]
+ mov eax,[abs fs:0xbbbbbbbb]
+ mov ebx,[abs fs:0xbbbbbbbb]
+ mov rax,[abs fs:0xbbbbbbbb]
+ mov rbx,[abs fs:0xbbbbbbbb]
+ mov al,[abs fs:0xffffffffcccccccc]
+ mov bl,[abs fs:0xffffffffcccccccc]
+ mov ax,[abs fs:0xffffffffcccccccc]
+ mov bx,[abs fs:0xffffffffcccccccc]
+ mov eax,[abs fs:0xffffffffcccccccc]
+ mov ebx,[abs fs:0xffffffffcccccccc]
+ mov rax,[abs fs:0xffffffffcccccccc]
+ mov rbx,[abs fs:0xffffffffcccccccc]
+
+ mov al,[abs dword fs:foo]
+ mov bl,[abs dword fs:foo]
+ mov ax,[abs dword fs:foo]
+ mov bx,[abs dword fs:foo]
+ mov eax,[abs dword fs:foo]
+ mov ebx,[abs dword fs:foo]
+ mov rax,[abs dword fs:foo]
+ mov rbx,[abs dword fs:foo]
+ mov al,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs dword fs:0xbbbbbbbb]
+ mov bl,[abs dword fs:0xbbbbbbbb]
+ mov ax,[abs dword fs:0xbbbbbbbb]
+ mov bx,[abs dword fs:0xbbbbbbbb]
+ mov eax,[abs dword fs:0xbbbbbbbb]
+ mov ebx,[abs dword fs:0xbbbbbbbb]
+ mov rax,[abs dword fs:0xbbbbbbbb]
+ mov rbx,[abs dword fs:0xbbbbbbbb]
+ mov al,[abs dword fs:0xffffffffcccccccc]
+ mov bl,[abs dword fs:0xffffffffcccccccc]
+ mov ax,[abs dword fs:0xffffffffcccccccc]
+ mov bx,[abs dword fs:0xffffffffcccccccc]
+ mov eax,[abs dword fs:0xffffffffcccccccc]
+ mov ebx,[abs dword fs:0xffffffffcccccccc]
+ mov rax,[abs dword fs:0xffffffffcccccccc]
+ mov rbx,[abs dword fs:0xffffffffcccccccc]
+
+ mov al,[abs qword fs:foo]
+ mov bl,[abs qword fs:foo]
+ mov ax,[abs qword fs:foo]
+ mov bx,[abs qword fs:foo]
+ mov eax,[abs qword fs:foo]
+ mov ebx,[abs qword fs:foo]
+ mov rax,[abs qword fs:foo]
+ mov rbx,[abs qword fs:foo]
+ mov al,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs qword fs:0xbbbbbbbb]
+ mov bl,[abs qword fs:0xbbbbbbbb]
+ mov ax,[abs qword fs:0xbbbbbbbb]
+ mov bx,[abs qword fs:0xbbbbbbbb]
+ mov eax,[abs qword fs:0xbbbbbbbb]
+ mov ebx,[abs qword fs:0xbbbbbbbb]
+ mov rax,[abs qword fs:0xbbbbbbbb]
+ mov rbx,[abs qword fs:0xbbbbbbbb]
+ mov al,[abs qword fs:0xffffffffcccccccc]
+ mov bl,[abs qword fs:0xffffffffcccccccc]
+ mov ax,[abs qword fs:0xffffffffcccccccc]
+ mov bx,[abs qword fs:0xffffffffcccccccc]
+ mov eax,[abs qword fs:0xffffffffcccccccc]
+ mov ebx,[abs qword fs:0xffffffffcccccccc]
+ mov rax,[abs qword fs:0xffffffffcccccccc]
+ mov rbx,[abs qword fs:0xffffffffcccccccc]
+
+ mov al,[a64 abs fs:foo]
+ mov bl,[a64 abs fs:foo]
+ mov ax,[a64 abs fs:foo]
+ mov bx,[a64 abs fs:foo]
+ mov eax,[a64 abs fs:foo]
+ mov ebx,[a64 abs fs:foo]
+ mov rax,[a64 abs fs:foo]
+ mov rbx,[a64 abs fs:foo]
+ mov al,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs fs:0xbbbbbbbb]
+ mov bl,[a64 abs fs:0xbbbbbbbb]
+ mov ax,[a64 abs fs:0xbbbbbbbb]
+ mov bx,[a64 abs fs:0xbbbbbbbb]
+ mov eax,[a64 abs fs:0xbbbbbbbb]
+ mov ebx,[a64 abs fs:0xbbbbbbbb]
+ mov rax,[a64 abs fs:0xbbbbbbbb]
+ mov rbx,[a64 abs fs:0xbbbbbbbb]
+ mov al,[a64 abs fs:0xffffffffcccccccc]
+ mov bl,[a64 abs fs:0xffffffffcccccccc]
+ mov ax,[a64 abs fs:0xffffffffcccccccc]
+ mov bx,[a64 abs fs:0xffffffffcccccccc]
+ mov eax,[a64 abs fs:0xffffffffcccccccc]
+ mov ebx,[a64 abs fs:0xffffffffcccccccc]
+ mov rax,[a64 abs fs:0xffffffffcccccccc]
+ mov rbx,[a64 abs fs:0xffffffffcccccccc]
+
+ mov al,[a64 abs dword fs:foo]
+ mov bl,[a64 abs dword fs:foo]
+ mov ax,[a64 abs dword fs:foo]
+ mov bx,[a64 abs dword fs:foo]
+ mov eax,[a64 abs dword fs:foo]
+ mov ebx,[a64 abs dword fs:foo]
+ mov rax,[a64 abs dword fs:foo]
+ mov rbx,[a64 abs dword fs:foo]
+ mov al,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs dword fs:0xbbbbbbbb]
+ mov bl,[a64 abs dword fs:0xbbbbbbbb]
+ mov ax,[a64 abs dword fs:0xbbbbbbbb]
+ mov bx,[a64 abs dword fs:0xbbbbbbbb]
+ mov eax,[a64 abs dword fs:0xbbbbbbbb]
+ mov ebx,[a64 abs dword fs:0xbbbbbbbb]
+ mov rax,[a64 abs dword fs:0xbbbbbbbb]
+ mov rbx,[a64 abs dword fs:0xbbbbbbbb]
+ mov al,[a64 abs dword fs:0xffffffffcccccccc]
+ mov bl,[a64 abs dword fs:0xffffffffcccccccc]
+ mov ax,[a64 abs dword fs:0xffffffffcccccccc]
+ mov bx,[a64 abs dword fs:0xffffffffcccccccc]
+ mov eax,[a64 abs dword fs:0xffffffffcccccccc]
+ mov ebx,[a64 abs dword fs:0xffffffffcccccccc]
+ mov rax,[a64 abs dword fs:0xffffffffcccccccc]
+ mov rbx,[a64 abs dword fs:0xffffffffcccccccc]
+
+ mov al,[a64 abs qword fs:foo]
+ mov bl,[a64 abs qword fs:foo]
+ mov ax,[a64 abs qword fs:foo]
+ mov bx,[a64 abs qword fs:foo]
+ mov eax,[a64 abs qword fs:foo]
+ mov ebx,[a64 abs qword fs:foo]
+ mov rax,[a64 abs qword fs:foo]
+ mov rbx,[a64 abs qword fs:foo]
+ mov al,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs qword fs:0xbbbbbbbb]
+ mov bl,[a64 abs qword fs:0xbbbbbbbb]
+ mov ax,[a64 abs qword fs:0xbbbbbbbb]
+ mov bx,[a64 abs qword fs:0xbbbbbbbb]
+ mov eax,[a64 abs qword fs:0xbbbbbbbb]
+ mov ebx,[a64 abs qword fs:0xbbbbbbbb]
+ mov rax,[a64 abs qword fs:0xbbbbbbbb]
+ mov rbx,[a64 abs qword fs:0xbbbbbbbb]
+ mov al,[a64 abs qword fs:0xffffffffcccccccc]
+ mov bl,[a64 abs qword fs:0xffffffffcccccccc]
+ mov ax,[a64 abs qword fs:0xffffffffcccccccc]
+ mov bx,[a64 abs qword fs:0xffffffffcccccccc]
+ mov eax,[a64 abs qword fs:0xffffffffcccccccc]
+ mov ebx,[a64 abs qword fs:0xffffffffcccccccc]
+ mov rax,[a64 abs qword fs:0xffffffffcccccccc]
+ mov rbx,[a64 abs qword fs:0xffffffffcccccccc]
+
+ mov al,[a32 abs fs:foo]
+ mov bl,[a32 abs fs:foo]
+ mov ax,[a32 abs fs:foo]
+ mov bx,[a32 abs fs:foo]
+ mov eax,[a32 abs fs:foo]
+ mov ebx,[a32 abs fs:foo]
+ mov rax,[a32 abs fs:foo]
+ mov rbx,[a32 abs fs:foo]
+ mov al,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs fs:0xbbbbbbbb]
+ mov bl,[a32 abs fs:0xbbbbbbbb]
+ mov ax,[a32 abs fs:0xbbbbbbbb]
+ mov bx,[a32 abs fs:0xbbbbbbbb]
+ mov eax,[a32 abs fs:0xbbbbbbbb]
+ mov ebx,[a32 abs fs:0xbbbbbbbb]
+ mov rax,[a32 abs fs:0xbbbbbbbb]
+ mov rbx,[a32 abs fs:0xbbbbbbbb]
+ mov al,[a32 abs fs:0xffffffffcccccccc]
+ mov bl,[a32 abs fs:0xffffffffcccccccc]
+ mov ax,[a32 abs fs:0xffffffffcccccccc]
+ mov bx,[a32 abs fs:0xffffffffcccccccc]
+ mov eax,[a32 abs fs:0xffffffffcccccccc]
+ mov ebx,[a32 abs fs:0xffffffffcccccccc]
+ mov rax,[a32 abs fs:0xffffffffcccccccc]
+ mov rbx,[a32 abs fs:0xffffffffcccccccc]
+
+ mov al,[a32 abs dword fs:foo]
+ mov bl,[a32 abs dword fs:foo]
+ mov ax,[a32 abs dword fs:foo]
+ mov bx,[a32 abs dword fs:foo]
+ mov eax,[a32 abs dword fs:foo]
+ mov ebx,[a32 abs dword fs:foo]
+ mov rax,[a32 abs dword fs:foo]
+ mov rbx,[a32 abs dword fs:foo]
+ mov al,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs dword fs:0xbbbbbbbb]
+ mov bl,[a32 abs dword fs:0xbbbbbbbb]
+ mov ax,[a32 abs dword fs:0xbbbbbbbb]
+ mov bx,[a32 abs dword fs:0xbbbbbbbb]
+ mov eax,[a32 abs dword fs:0xbbbbbbbb]
+ mov ebx,[a32 abs dword fs:0xbbbbbbbb]
+ mov rax,[a32 abs dword fs:0xbbbbbbbb]
+ mov rbx,[a32 abs dword fs:0xbbbbbbbb]
+ mov al,[a32 abs dword fs:0xffffffffcccccccc]
+ mov bl,[a32 abs dword fs:0xffffffffcccccccc]
+ mov ax,[a32 abs dword fs:0xffffffffcccccccc]
+ mov bx,[a32 abs dword fs:0xffffffffcccccccc]
+ mov eax,[a32 abs dword fs:0xffffffffcccccccc]
+ mov ebx,[a32 abs dword fs:0xffffffffcccccccc]
+ mov rax,[a32 abs dword fs:0xffffffffcccccccc]
+ mov rbx,[a32 abs dword fs:0xffffffffcccccccc]
+
+ mov al,[a32 abs qword fs:foo]
+ mov bl,[a32 abs qword fs:foo]
+ mov ax,[a32 abs qword fs:foo]
+ mov bx,[a32 abs qword fs:foo]
+ mov eax,[a32 abs qword fs:foo]
+ mov ebx,[a32 abs qword fs:foo]
+ mov rax,[a32 abs qword fs:foo]
+ mov rbx,[a32 abs qword fs:foo]
+ mov al,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs qword fs:0xbbbbbbbb]
+ mov bl,[a32 abs qword fs:0xbbbbbbbb]
+ mov ax,[a32 abs qword fs:0xbbbbbbbb]
+ mov bx,[a32 abs qword fs:0xbbbbbbbb]
+ mov eax,[a32 abs qword fs:0xbbbbbbbb]
+ mov ebx,[a32 abs qword fs:0xbbbbbbbb]
+ mov rax,[a32 abs qword fs:0xbbbbbbbb]
+ mov rbx,[a32 abs qword fs:0xbbbbbbbb]
+ mov al,[a32 abs qword fs:0xffffffffcccccccc]
+ mov bl,[a32 abs qword fs:0xffffffffcccccccc]
+ mov ax,[a32 abs qword fs:0xffffffffcccccccc]
+ mov bx,[a32 abs qword fs:0xffffffffcccccccc]
+ mov eax,[a32 abs qword fs:0xffffffffcccccccc]
+ mov ebx,[a32 abs qword fs:0xffffffffcccccccc]
+ mov rax,[a32 abs qword fs:0xffffffffcccccccc]
+ mov rbx,[a32 abs qword fs:0xffffffffcccccccc]
+
+ mov al,[rel fs:foo]
+ mov bl,[rel fs:foo]
+ mov ax,[rel fs:foo]
+ mov bx,[rel fs:foo]
+ mov eax,[rel fs:foo]
+ mov ebx,[rel fs:foo]
+ mov rax,[rel fs:foo]
+ mov rbx,[rel fs:foo]
+ mov al,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel fs:0xbbbbbbbb]
+ mov bl,[rel fs:0xbbbbbbbb]
+ mov ax,[rel fs:0xbbbbbbbb]
+ mov bx,[rel fs:0xbbbbbbbb]
+ mov eax,[rel fs:0xbbbbbbbb]
+ mov ebx,[rel fs:0xbbbbbbbb]
+ mov rax,[rel fs:0xbbbbbbbb]
+ mov rbx,[rel fs:0xbbbbbbbb]
+ mov al,[rel fs:0xffffffffcccccccc]
+ mov bl,[rel fs:0xffffffffcccccccc]
+ mov ax,[rel fs:0xffffffffcccccccc]
+ mov bx,[rel fs:0xffffffffcccccccc]
+ mov eax,[rel fs:0xffffffffcccccccc]
+ mov ebx,[rel fs:0xffffffffcccccccc]
+ mov rax,[rel fs:0xffffffffcccccccc]
+ mov rbx,[rel fs:0xffffffffcccccccc]
+
+ mov al,[rel dword fs:foo]
+ mov bl,[rel dword fs:foo]
+ mov ax,[rel dword fs:foo]
+ mov bx,[rel dword fs:foo]
+ mov eax,[rel dword fs:foo]
+ mov ebx,[rel dword fs:foo]
+ mov rax,[rel dword fs:foo]
+ mov rbx,[rel dword fs:foo]
+ mov al,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel dword fs:0xbbbbbbbb]
+ mov bl,[rel dword fs:0xbbbbbbbb]
+ mov ax,[rel dword fs:0xbbbbbbbb]
+ mov bx,[rel dword fs:0xbbbbbbbb]
+ mov eax,[rel dword fs:0xbbbbbbbb]
+ mov ebx,[rel dword fs:0xbbbbbbbb]
+ mov rax,[rel dword fs:0xbbbbbbbb]
+ mov rbx,[rel dword fs:0xbbbbbbbb]
+ mov al,[rel dword fs:0xffffffffcccccccc]
+ mov bl,[rel dword fs:0xffffffffcccccccc]
+ mov ax,[rel dword fs:0xffffffffcccccccc]
+ mov bx,[rel dword fs:0xffffffffcccccccc]
+ mov eax,[rel dword fs:0xffffffffcccccccc]
+ mov ebx,[rel dword fs:0xffffffffcccccccc]
+ mov rax,[rel dword fs:0xffffffffcccccccc]
+ mov rbx,[rel dword fs:0xffffffffcccccccc]
+
+ mov al,[rel qword fs:foo]
+ mov bl,[rel qword fs:foo]
+ mov ax,[rel qword fs:foo]
+ mov bx,[rel qword fs:foo]
+ mov eax,[rel qword fs:foo]
+ mov ebx,[rel qword fs:foo]
+ mov rax,[rel qword fs:foo]
+ mov rbx,[rel qword fs:foo]
+ mov al,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel qword fs:0xbbbbbbbb]
+ mov bl,[rel qword fs:0xbbbbbbbb]
+ mov ax,[rel qword fs:0xbbbbbbbb]
+ mov bx,[rel qword fs:0xbbbbbbbb]
+ mov eax,[rel qword fs:0xbbbbbbbb]
+ mov ebx,[rel qword fs:0xbbbbbbbb]
+ mov rax,[rel qword fs:0xbbbbbbbb]
+ mov rbx,[rel qword fs:0xbbbbbbbb]
+ mov al,[rel qword fs:0xffffffffcccccccc]
+ mov bl,[rel qword fs:0xffffffffcccccccc]
+ mov ax,[rel qword fs:0xffffffffcccccccc]
+ mov bx,[rel qword fs:0xffffffffcccccccc]
+ mov eax,[rel qword fs:0xffffffffcccccccc]
+ mov ebx,[rel qword fs:0xffffffffcccccccc]
+ mov rax,[rel qword fs:0xffffffffcccccccc]
+ mov rbx,[rel qword fs:0xffffffffcccccccc]
+
+ mov al,[a64 rel fs:foo]
+ mov bl,[a64 rel fs:foo]
+ mov ax,[a64 rel fs:foo]
+ mov bx,[a64 rel fs:foo]
+ mov eax,[a64 rel fs:foo]
+ mov ebx,[a64 rel fs:foo]
+ mov rax,[a64 rel fs:foo]
+ mov rbx,[a64 rel fs:foo]
+ mov al,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel fs:0xbbbbbbbb]
+ mov bl,[a64 rel fs:0xbbbbbbbb]
+ mov ax,[a64 rel fs:0xbbbbbbbb]
+ mov bx,[a64 rel fs:0xbbbbbbbb]
+ mov eax,[a64 rel fs:0xbbbbbbbb]
+ mov ebx,[a64 rel fs:0xbbbbbbbb]
+ mov rax,[a64 rel fs:0xbbbbbbbb]
+ mov rbx,[a64 rel fs:0xbbbbbbbb]
+ mov al,[a64 rel fs:0xffffffffcccccccc]
+ mov bl,[a64 rel fs:0xffffffffcccccccc]
+ mov ax,[a64 rel fs:0xffffffffcccccccc]
+ mov bx,[a64 rel fs:0xffffffffcccccccc]
+ mov eax,[a64 rel fs:0xffffffffcccccccc]
+ mov ebx,[a64 rel fs:0xffffffffcccccccc]
+ mov rax,[a64 rel fs:0xffffffffcccccccc]
+ mov rbx,[a64 rel fs:0xffffffffcccccccc]
+
+ mov al,[a64 rel dword fs:foo]
+ mov bl,[a64 rel dword fs:foo]
+ mov ax,[a64 rel dword fs:foo]
+ mov bx,[a64 rel dword fs:foo]
+ mov eax,[a64 rel dword fs:foo]
+ mov ebx,[a64 rel dword fs:foo]
+ mov rax,[a64 rel dword fs:foo]
+ mov rbx,[a64 rel dword fs:foo]
+ mov al,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel dword fs:0xbbbbbbbb]
+ mov bl,[a64 rel dword fs:0xbbbbbbbb]
+ mov ax,[a64 rel dword fs:0xbbbbbbbb]
+ mov bx,[a64 rel dword fs:0xbbbbbbbb]
+ mov eax,[a64 rel dword fs:0xbbbbbbbb]
+ mov ebx,[a64 rel dword fs:0xbbbbbbbb]
+ mov rax,[a64 rel dword fs:0xbbbbbbbb]
+ mov rbx,[a64 rel dword fs:0xbbbbbbbb]
+ mov al,[a64 rel dword fs:0xffffffffcccccccc]
+ mov bl,[a64 rel dword fs:0xffffffffcccccccc]
+ mov ax,[a64 rel dword fs:0xffffffffcccccccc]
+ mov bx,[a64 rel dword fs:0xffffffffcccccccc]
+ mov eax,[a64 rel dword fs:0xffffffffcccccccc]
+ mov ebx,[a64 rel dword fs:0xffffffffcccccccc]
+ mov rax,[a64 rel dword fs:0xffffffffcccccccc]
+ mov rbx,[a64 rel dword fs:0xffffffffcccccccc]
+
+ mov al,[a64 rel qword fs:foo]
+ mov bl,[a64 rel qword fs:foo]
+ mov ax,[a64 rel qword fs:foo]
+ mov bx,[a64 rel qword fs:foo]
+ mov eax,[a64 rel qword fs:foo]
+ mov ebx,[a64 rel qword fs:foo]
+ mov rax,[a64 rel qword fs:foo]
+ mov rbx,[a64 rel qword fs:foo]
+ mov al,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel qword fs:0xbbbbbbbb]
+ mov bl,[a64 rel qword fs:0xbbbbbbbb]
+ mov ax,[a64 rel qword fs:0xbbbbbbbb]
+ mov bx,[a64 rel qword fs:0xbbbbbbbb]
+ mov eax,[a64 rel qword fs:0xbbbbbbbb]
+ mov ebx,[a64 rel qword fs:0xbbbbbbbb]
+ mov rax,[a64 rel qword fs:0xbbbbbbbb]
+ mov rbx,[a64 rel qword fs:0xbbbbbbbb]
+ mov al,[a64 rel qword fs:0xffffffffcccccccc]
+ mov bl,[a64 rel qword fs:0xffffffffcccccccc]
+ mov ax,[a64 rel qword fs:0xffffffffcccccccc]
+ mov bx,[a64 rel qword fs:0xffffffffcccccccc]
+ mov eax,[a64 rel qword fs:0xffffffffcccccccc]
+ mov ebx,[a64 rel qword fs:0xffffffffcccccccc]
+ mov rax,[a64 rel qword fs:0xffffffffcccccccc]
+ mov rbx,[a64 rel qword fs:0xffffffffcccccccc]
+
+ mov al,[a32 rel fs:foo]
+ mov bl,[a32 rel fs:foo]
+ mov ax,[a32 rel fs:foo]
+ mov bx,[a32 rel fs:foo]
+ mov eax,[a32 rel fs:foo]
+ mov ebx,[a32 rel fs:foo]
+ mov rax,[a32 rel fs:foo]
+ mov rbx,[a32 rel fs:foo]
+ mov al,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel fs:0xbbbbbbbb]
+ mov bl,[a32 rel fs:0xbbbbbbbb]
+ mov ax,[a32 rel fs:0xbbbbbbbb]
+ mov bx,[a32 rel fs:0xbbbbbbbb]
+ mov eax,[a32 rel fs:0xbbbbbbbb]
+ mov ebx,[a32 rel fs:0xbbbbbbbb]
+ mov rax,[a32 rel fs:0xbbbbbbbb]
+ mov rbx,[a32 rel fs:0xbbbbbbbb]
+ mov al,[a32 rel fs:0xffffffffcccccccc]
+ mov bl,[a32 rel fs:0xffffffffcccccccc]
+ mov ax,[a32 rel fs:0xffffffffcccccccc]
+ mov bx,[a32 rel fs:0xffffffffcccccccc]
+ mov eax,[a32 rel fs:0xffffffffcccccccc]
+ mov ebx,[a32 rel fs:0xffffffffcccccccc]
+ mov rax,[a32 rel fs:0xffffffffcccccccc]
+ mov rbx,[a32 rel fs:0xffffffffcccccccc]
+
+ mov al,[a32 rel dword fs:foo]
+ mov bl,[a32 rel dword fs:foo]
+ mov ax,[a32 rel dword fs:foo]
+ mov bx,[a32 rel dword fs:foo]
+ mov eax,[a32 rel dword fs:foo]
+ mov ebx,[a32 rel dword fs:foo]
+ mov rax,[a32 rel dword fs:foo]
+ mov rbx,[a32 rel dword fs:foo]
+ mov al,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel dword fs:0xbbbbbbbb]
+ mov bl,[a32 rel dword fs:0xbbbbbbbb]
+ mov ax,[a32 rel dword fs:0xbbbbbbbb]
+ mov bx,[a32 rel dword fs:0xbbbbbbbb]
+ mov eax,[a32 rel dword fs:0xbbbbbbbb]
+ mov ebx,[a32 rel dword fs:0xbbbbbbbb]
+ mov rax,[a32 rel dword fs:0xbbbbbbbb]
+ mov rbx,[a32 rel dword fs:0xbbbbbbbb]
+ mov al,[a32 rel dword fs:0xffffffffcccccccc]
+ mov bl,[a32 rel dword fs:0xffffffffcccccccc]
+ mov ax,[a32 rel dword fs:0xffffffffcccccccc]
+ mov bx,[a32 rel dword fs:0xffffffffcccccccc]
+ mov eax,[a32 rel dword fs:0xffffffffcccccccc]
+ mov ebx,[a32 rel dword fs:0xffffffffcccccccc]
+ mov rax,[a32 rel dword fs:0xffffffffcccccccc]
+ mov rbx,[a32 rel dword fs:0xffffffffcccccccc]
+
+ mov al,[a32 rel qword fs:foo]
+ mov bl,[a32 rel qword fs:foo]
+ mov ax,[a32 rel qword fs:foo]
+ mov bx,[a32 rel qword fs:foo]
+ mov eax,[a32 rel qword fs:foo]
+ mov ebx,[a32 rel qword fs:foo]
+ mov rax,[a32 rel qword fs:foo]
+ mov rbx,[a32 rel qword fs:foo]
+ mov al,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel qword fs:0xbbbbbbbb]
+ mov bl,[a32 rel qword fs:0xbbbbbbbb]
+ mov ax,[a32 rel qword fs:0xbbbbbbbb]
+ mov bx,[a32 rel qword fs:0xbbbbbbbb]
+ mov eax,[a32 rel qword fs:0xbbbbbbbb]
+ mov ebx,[a32 rel qword fs:0xbbbbbbbb]
+ mov rax,[a32 rel qword fs:0xbbbbbbbb]
+ mov rbx,[a32 rel qword fs:0xbbbbbbbb]
+ mov al,[a32 rel qword fs:0xffffffffcccccccc]
+ mov bl,[a32 rel qword fs:0xffffffffcccccccc]
+ mov ax,[a32 rel qword fs:0xffffffffcccccccc]
+ mov bx,[a32 rel qword fs:0xffffffffcccccccc]
+ mov eax,[a32 rel qword fs:0xffffffffcccccccc]
+ mov ebx,[a32 rel qword fs:0xffffffffcccccccc]
+ mov rax,[a32 rel qword fs:0xffffffffcccccccc]
+ mov rbx,[a32 rel qword fs:0xffffffffcccccccc]
+
+ mov al,[es:foo]
+ mov bl,[es:foo]
+ mov ax,[es:foo]
+ mov bx,[es:foo]
+ mov eax,[es:foo]
+ mov ebx,[es:foo]
+ mov rax,[es:foo]
+ mov rbx,[es:foo]
+ mov al,[es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[es:0xaaaaaaaaaaaaaaaa]
+ mov al,[es:0xbbbbbbbb]
+ mov bl,[es:0xbbbbbbbb]
+ mov ax,[es:0xbbbbbbbb]
+ mov bx,[es:0xbbbbbbbb]
+ mov eax,[es:0xbbbbbbbb]
+ mov ebx,[es:0xbbbbbbbb]
+ mov rax,[es:0xbbbbbbbb]
+ mov rbx,[es:0xbbbbbbbb]
+ mov al,[es:0xffffffffcccccccc]
+ mov bl,[es:0xffffffffcccccccc]
+ mov ax,[es:0xffffffffcccccccc]
+ mov bx,[es:0xffffffffcccccccc]
+ mov eax,[es:0xffffffffcccccccc]
+ mov ebx,[es:0xffffffffcccccccc]
+ mov rax,[es:0xffffffffcccccccc]
+ mov rbx,[es:0xffffffffcccccccc]
+
+ mov al,[dword es:foo]
+ mov bl,[dword es:foo]
+ mov ax,[dword es:foo]
+ mov bx,[dword es:foo]
+ mov eax,[dword es:foo]
+ mov ebx,[dword es:foo]
+ mov rax,[dword es:foo]
+ mov rbx,[dword es:foo]
+ mov al,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[dword es:0xbbbbbbbb]
+ mov bl,[dword es:0xbbbbbbbb]
+ mov ax,[dword es:0xbbbbbbbb]
+ mov bx,[dword es:0xbbbbbbbb]
+ mov eax,[dword es:0xbbbbbbbb]
+ mov ebx,[dword es:0xbbbbbbbb]
+ mov rax,[dword es:0xbbbbbbbb]
+ mov rbx,[dword es:0xbbbbbbbb]
+ mov al,[dword es:0xffffffffcccccccc]
+ mov bl,[dword es:0xffffffffcccccccc]
+ mov ax,[dword es:0xffffffffcccccccc]
+ mov bx,[dword es:0xffffffffcccccccc]
+ mov eax,[dword es:0xffffffffcccccccc]
+ mov ebx,[dword es:0xffffffffcccccccc]
+ mov rax,[dword es:0xffffffffcccccccc]
+ mov rbx,[dword es:0xffffffffcccccccc]
+
+ mov al,[qword es:foo]
+ mov bl,[qword es:foo]
+ mov ax,[qword es:foo]
+ mov bx,[qword es:foo]
+ mov eax,[qword es:foo]
+ mov ebx,[qword es:foo]
+ mov rax,[qword es:foo]
+ mov rbx,[qword es:foo]
+ mov al,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[qword es:0xbbbbbbbb]
+ mov bl,[qword es:0xbbbbbbbb]
+ mov ax,[qword es:0xbbbbbbbb]
+ mov bx,[qword es:0xbbbbbbbb]
+ mov eax,[qword es:0xbbbbbbbb]
+ mov ebx,[qword es:0xbbbbbbbb]
+ mov rax,[qword es:0xbbbbbbbb]
+ mov rbx,[qword es:0xbbbbbbbb]
+ mov al,[qword es:0xffffffffcccccccc]
+ mov bl,[qword es:0xffffffffcccccccc]
+ mov ax,[qword es:0xffffffffcccccccc]
+ mov bx,[qword es:0xffffffffcccccccc]
+ mov eax,[qword es:0xffffffffcccccccc]
+ mov ebx,[qword es:0xffffffffcccccccc]
+ mov rax,[qword es:0xffffffffcccccccc]
+ mov rbx,[qword es:0xffffffffcccccccc]
+
+ mov al,[a64 es:foo]
+ mov bl,[a64 es:foo]
+ mov ax,[a64 es:foo]
+ mov bx,[a64 es:foo]
+ mov eax,[a64 es:foo]
+ mov ebx,[a64 es:foo]
+ mov rax,[a64 es:foo]
+ mov rbx,[a64 es:foo]
+ mov al,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 es:0xbbbbbbbb]
+ mov bl,[a64 es:0xbbbbbbbb]
+ mov ax,[a64 es:0xbbbbbbbb]
+ mov bx,[a64 es:0xbbbbbbbb]
+ mov eax,[a64 es:0xbbbbbbbb]
+ mov ebx,[a64 es:0xbbbbbbbb]
+ mov rax,[a64 es:0xbbbbbbbb]
+ mov rbx,[a64 es:0xbbbbbbbb]
+ mov al,[a64 es:0xffffffffcccccccc]
+ mov bl,[a64 es:0xffffffffcccccccc]
+ mov ax,[a64 es:0xffffffffcccccccc]
+ mov bx,[a64 es:0xffffffffcccccccc]
+ mov eax,[a64 es:0xffffffffcccccccc]
+ mov ebx,[a64 es:0xffffffffcccccccc]
+ mov rax,[a64 es:0xffffffffcccccccc]
+ mov rbx,[a64 es:0xffffffffcccccccc]
+
+ mov al,[a64 dword es:foo]
+ mov bl,[a64 dword es:foo]
+ mov ax,[a64 dword es:foo]
+ mov bx,[a64 dword es:foo]
+ mov eax,[a64 dword es:foo]
+ mov ebx,[a64 dword es:foo]
+ mov rax,[a64 dword es:foo]
+ mov rbx,[a64 dword es:foo]
+ mov al,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 dword es:0xbbbbbbbb]
+ mov bl,[a64 dword es:0xbbbbbbbb]
+ mov ax,[a64 dword es:0xbbbbbbbb]
+ mov bx,[a64 dword es:0xbbbbbbbb]
+ mov eax,[a64 dword es:0xbbbbbbbb]
+ mov ebx,[a64 dword es:0xbbbbbbbb]
+ mov rax,[a64 dword es:0xbbbbbbbb]
+ mov rbx,[a64 dword es:0xbbbbbbbb]
+ mov al,[a64 dword es:0xffffffffcccccccc]
+ mov bl,[a64 dword es:0xffffffffcccccccc]
+ mov ax,[a64 dword es:0xffffffffcccccccc]
+ mov bx,[a64 dword es:0xffffffffcccccccc]
+ mov eax,[a64 dword es:0xffffffffcccccccc]
+ mov ebx,[a64 dword es:0xffffffffcccccccc]
+ mov rax,[a64 dword es:0xffffffffcccccccc]
+ mov rbx,[a64 dword es:0xffffffffcccccccc]
+
+ mov al,[a64 qword es:foo]
+ mov bl,[a64 qword es:foo]
+ mov ax,[a64 qword es:foo]
+ mov bx,[a64 qword es:foo]
+ mov eax,[a64 qword es:foo]
+ mov ebx,[a64 qword es:foo]
+ mov rax,[a64 qword es:foo]
+ mov rbx,[a64 qword es:foo]
+ mov al,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 qword es:0xbbbbbbbb]
+ mov bl,[a64 qword es:0xbbbbbbbb]
+ mov ax,[a64 qword es:0xbbbbbbbb]
+ mov bx,[a64 qword es:0xbbbbbbbb]
+ mov eax,[a64 qword es:0xbbbbbbbb]
+ mov ebx,[a64 qword es:0xbbbbbbbb]
+ mov rax,[a64 qword es:0xbbbbbbbb]
+ mov rbx,[a64 qword es:0xbbbbbbbb]
+ mov al,[a64 qword es:0xffffffffcccccccc]
+ mov bl,[a64 qword es:0xffffffffcccccccc]
+ mov ax,[a64 qword es:0xffffffffcccccccc]
+ mov bx,[a64 qword es:0xffffffffcccccccc]
+ mov eax,[a64 qword es:0xffffffffcccccccc]
+ mov ebx,[a64 qword es:0xffffffffcccccccc]
+ mov rax,[a64 qword es:0xffffffffcccccccc]
+ mov rbx,[a64 qword es:0xffffffffcccccccc]
+
+ mov al,[a32 es:foo]
+ mov bl,[a32 es:foo]
+ mov ax,[a32 es:foo]
+ mov bx,[a32 es:foo]
+ mov eax,[a32 es:foo]
+ mov ebx,[a32 es:foo]
+ mov rax,[a32 es:foo]
+ mov rbx,[a32 es:foo]
+ mov al,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 es:0xbbbbbbbb]
+ mov bl,[a32 es:0xbbbbbbbb]
+ mov ax,[a32 es:0xbbbbbbbb]
+ mov bx,[a32 es:0xbbbbbbbb]
+ mov eax,[a32 es:0xbbbbbbbb]
+ mov ebx,[a32 es:0xbbbbbbbb]
+ mov rax,[a32 es:0xbbbbbbbb]
+ mov rbx,[a32 es:0xbbbbbbbb]
+ mov al,[a32 es:0xffffffffcccccccc]
+ mov bl,[a32 es:0xffffffffcccccccc]
+ mov ax,[a32 es:0xffffffffcccccccc]
+ mov bx,[a32 es:0xffffffffcccccccc]
+ mov eax,[a32 es:0xffffffffcccccccc]
+ mov ebx,[a32 es:0xffffffffcccccccc]
+ mov rax,[a32 es:0xffffffffcccccccc]
+ mov rbx,[a32 es:0xffffffffcccccccc]
+
+ mov al,[a32 dword es:foo]
+ mov bl,[a32 dword es:foo]
+ mov ax,[a32 dword es:foo]
+ mov bx,[a32 dword es:foo]
+ mov eax,[a32 dword es:foo]
+ mov ebx,[a32 dword es:foo]
+ mov rax,[a32 dword es:foo]
+ mov rbx,[a32 dword es:foo]
+ mov al,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 dword es:0xbbbbbbbb]
+ mov bl,[a32 dword es:0xbbbbbbbb]
+ mov ax,[a32 dword es:0xbbbbbbbb]
+ mov bx,[a32 dword es:0xbbbbbbbb]
+ mov eax,[a32 dword es:0xbbbbbbbb]
+ mov ebx,[a32 dword es:0xbbbbbbbb]
+ mov rax,[a32 dword es:0xbbbbbbbb]
+ mov rbx,[a32 dword es:0xbbbbbbbb]
+ mov al,[a32 dword es:0xffffffffcccccccc]
+ mov bl,[a32 dword es:0xffffffffcccccccc]
+ mov ax,[a32 dword es:0xffffffffcccccccc]
+ mov bx,[a32 dword es:0xffffffffcccccccc]
+ mov eax,[a32 dword es:0xffffffffcccccccc]
+ mov ebx,[a32 dword es:0xffffffffcccccccc]
+ mov rax,[a32 dword es:0xffffffffcccccccc]
+ mov rbx,[a32 dword es:0xffffffffcccccccc]
+
+ mov al,[a32 qword es:foo]
+ mov bl,[a32 qword es:foo]
+ mov ax,[a32 qword es:foo]
+ mov bx,[a32 qword es:foo]
+ mov eax,[a32 qword es:foo]
+ mov ebx,[a32 qword es:foo]
+ mov rax,[a32 qword es:foo]
+ mov rbx,[a32 qword es:foo]
+ mov al,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 qword es:0xbbbbbbbb]
+ mov bl,[a32 qword es:0xbbbbbbbb]
+ mov ax,[a32 qword es:0xbbbbbbbb]
+ mov bx,[a32 qword es:0xbbbbbbbb]
+ mov eax,[a32 qword es:0xbbbbbbbb]
+ mov ebx,[a32 qword es:0xbbbbbbbb]
+ mov rax,[a32 qword es:0xbbbbbbbb]
+ mov rbx,[a32 qword es:0xbbbbbbbb]
+ mov al,[a32 qword es:0xffffffffcccccccc]
+ mov bl,[a32 qword es:0xffffffffcccccccc]
+ mov ax,[a32 qword es:0xffffffffcccccccc]
+ mov bx,[a32 qword es:0xffffffffcccccccc]
+ mov eax,[a32 qword es:0xffffffffcccccccc]
+ mov ebx,[a32 qword es:0xffffffffcccccccc]
+ mov rax,[a32 qword es:0xffffffffcccccccc]
+ mov rbx,[a32 qword es:0xffffffffcccccccc]
+
+ mov al,[abs es:foo]
+ mov bl,[abs es:foo]
+ mov ax,[abs es:foo]
+ mov bx,[abs es:foo]
+ mov eax,[abs es:foo]
+ mov ebx,[abs es:foo]
+ mov rax,[abs es:foo]
+ mov rbx,[abs es:foo]
+ mov al,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs es:0xbbbbbbbb]
+ mov bl,[abs es:0xbbbbbbbb]
+ mov ax,[abs es:0xbbbbbbbb]
+ mov bx,[abs es:0xbbbbbbbb]
+ mov eax,[abs es:0xbbbbbbbb]
+ mov ebx,[abs es:0xbbbbbbbb]
+ mov rax,[abs es:0xbbbbbbbb]
+ mov rbx,[abs es:0xbbbbbbbb]
+ mov al,[abs es:0xffffffffcccccccc]
+ mov bl,[abs es:0xffffffffcccccccc]
+ mov ax,[abs es:0xffffffffcccccccc]
+ mov bx,[abs es:0xffffffffcccccccc]
+ mov eax,[abs es:0xffffffffcccccccc]
+ mov ebx,[abs es:0xffffffffcccccccc]
+ mov rax,[abs es:0xffffffffcccccccc]
+ mov rbx,[abs es:0xffffffffcccccccc]
+
+ mov al,[abs dword es:foo]
+ mov bl,[abs dword es:foo]
+ mov ax,[abs dword es:foo]
+ mov bx,[abs dword es:foo]
+ mov eax,[abs dword es:foo]
+ mov ebx,[abs dword es:foo]
+ mov rax,[abs dword es:foo]
+ mov rbx,[abs dword es:foo]
+ mov al,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs dword es:0xbbbbbbbb]
+ mov bl,[abs dword es:0xbbbbbbbb]
+ mov ax,[abs dword es:0xbbbbbbbb]
+ mov bx,[abs dword es:0xbbbbbbbb]
+ mov eax,[abs dword es:0xbbbbbbbb]
+ mov ebx,[abs dword es:0xbbbbbbbb]
+ mov rax,[abs dword es:0xbbbbbbbb]
+ mov rbx,[abs dword es:0xbbbbbbbb]
+ mov al,[abs dword es:0xffffffffcccccccc]
+ mov bl,[abs dword es:0xffffffffcccccccc]
+ mov ax,[abs dword es:0xffffffffcccccccc]
+ mov bx,[abs dword es:0xffffffffcccccccc]
+ mov eax,[abs dword es:0xffffffffcccccccc]
+ mov ebx,[abs dword es:0xffffffffcccccccc]
+ mov rax,[abs dword es:0xffffffffcccccccc]
+ mov rbx,[abs dword es:0xffffffffcccccccc]
+
+ mov al,[abs qword es:foo]
+ mov bl,[abs qword es:foo]
+ mov ax,[abs qword es:foo]
+ mov bx,[abs qword es:foo]
+ mov eax,[abs qword es:foo]
+ mov ebx,[abs qword es:foo]
+ mov rax,[abs qword es:foo]
+ mov rbx,[abs qword es:foo]
+ mov al,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs qword es:0xbbbbbbbb]
+ mov bl,[abs qword es:0xbbbbbbbb]
+ mov ax,[abs qword es:0xbbbbbbbb]
+ mov bx,[abs qword es:0xbbbbbbbb]
+ mov eax,[abs qword es:0xbbbbbbbb]
+ mov ebx,[abs qword es:0xbbbbbbbb]
+ mov rax,[abs qword es:0xbbbbbbbb]
+ mov rbx,[abs qword es:0xbbbbbbbb]
+ mov al,[abs qword es:0xffffffffcccccccc]
+ mov bl,[abs qword es:0xffffffffcccccccc]
+ mov ax,[abs qword es:0xffffffffcccccccc]
+ mov bx,[abs qword es:0xffffffffcccccccc]
+ mov eax,[abs qword es:0xffffffffcccccccc]
+ mov ebx,[abs qword es:0xffffffffcccccccc]
+ mov rax,[abs qword es:0xffffffffcccccccc]
+ mov rbx,[abs qword es:0xffffffffcccccccc]
+
+ mov al,[a64 abs es:foo]
+ mov bl,[a64 abs es:foo]
+ mov ax,[a64 abs es:foo]
+ mov bx,[a64 abs es:foo]
+ mov eax,[a64 abs es:foo]
+ mov ebx,[a64 abs es:foo]
+ mov rax,[a64 abs es:foo]
+ mov rbx,[a64 abs es:foo]
+ mov al,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs es:0xbbbbbbbb]
+ mov bl,[a64 abs es:0xbbbbbbbb]
+ mov ax,[a64 abs es:0xbbbbbbbb]
+ mov bx,[a64 abs es:0xbbbbbbbb]
+ mov eax,[a64 abs es:0xbbbbbbbb]
+ mov ebx,[a64 abs es:0xbbbbbbbb]
+ mov rax,[a64 abs es:0xbbbbbbbb]
+ mov rbx,[a64 abs es:0xbbbbbbbb]
+ mov al,[a64 abs es:0xffffffffcccccccc]
+ mov bl,[a64 abs es:0xffffffffcccccccc]
+ mov ax,[a64 abs es:0xffffffffcccccccc]
+ mov bx,[a64 abs es:0xffffffffcccccccc]
+ mov eax,[a64 abs es:0xffffffffcccccccc]
+ mov ebx,[a64 abs es:0xffffffffcccccccc]
+ mov rax,[a64 abs es:0xffffffffcccccccc]
+ mov rbx,[a64 abs es:0xffffffffcccccccc]
+
+ mov al,[a64 abs dword es:foo]
+ mov bl,[a64 abs dword es:foo]
+ mov ax,[a64 abs dword es:foo]
+ mov bx,[a64 abs dword es:foo]
+ mov eax,[a64 abs dword es:foo]
+ mov ebx,[a64 abs dword es:foo]
+ mov rax,[a64 abs dword es:foo]
+ mov rbx,[a64 abs dword es:foo]
+ mov al,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs dword es:0xbbbbbbbb]
+ mov bl,[a64 abs dword es:0xbbbbbbbb]
+ mov ax,[a64 abs dword es:0xbbbbbbbb]
+ mov bx,[a64 abs dword es:0xbbbbbbbb]
+ mov eax,[a64 abs dword es:0xbbbbbbbb]
+ mov ebx,[a64 abs dword es:0xbbbbbbbb]
+ mov rax,[a64 abs dword es:0xbbbbbbbb]
+ mov rbx,[a64 abs dword es:0xbbbbbbbb]
+ mov al,[a64 abs dword es:0xffffffffcccccccc]
+ mov bl,[a64 abs dword es:0xffffffffcccccccc]
+ mov ax,[a64 abs dword es:0xffffffffcccccccc]
+ mov bx,[a64 abs dword es:0xffffffffcccccccc]
+ mov eax,[a64 abs dword es:0xffffffffcccccccc]
+ mov ebx,[a64 abs dword es:0xffffffffcccccccc]
+ mov rax,[a64 abs dword es:0xffffffffcccccccc]
+ mov rbx,[a64 abs dword es:0xffffffffcccccccc]
+
+ mov al,[a64 abs qword es:foo]
+ mov bl,[a64 abs qword es:foo]
+ mov ax,[a64 abs qword es:foo]
+ mov bx,[a64 abs qword es:foo]
+ mov eax,[a64 abs qword es:foo]
+ mov ebx,[a64 abs qword es:foo]
+ mov rax,[a64 abs qword es:foo]
+ mov rbx,[a64 abs qword es:foo]
+ mov al,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs qword es:0xbbbbbbbb]
+ mov bl,[a64 abs qword es:0xbbbbbbbb]
+ mov ax,[a64 abs qword es:0xbbbbbbbb]
+ mov bx,[a64 abs qword es:0xbbbbbbbb]
+ mov eax,[a64 abs qword es:0xbbbbbbbb]
+ mov ebx,[a64 abs qword es:0xbbbbbbbb]
+ mov rax,[a64 abs qword es:0xbbbbbbbb]
+ mov rbx,[a64 abs qword es:0xbbbbbbbb]
+ mov al,[a64 abs qword es:0xffffffffcccccccc]
+ mov bl,[a64 abs qword es:0xffffffffcccccccc]
+ mov ax,[a64 abs qword es:0xffffffffcccccccc]
+ mov bx,[a64 abs qword es:0xffffffffcccccccc]
+ mov eax,[a64 abs qword es:0xffffffffcccccccc]
+ mov ebx,[a64 abs qword es:0xffffffffcccccccc]
+ mov rax,[a64 abs qword es:0xffffffffcccccccc]
+ mov rbx,[a64 abs qword es:0xffffffffcccccccc]
+
+ mov al,[a32 abs es:foo]
+ mov bl,[a32 abs es:foo]
+ mov ax,[a32 abs es:foo]
+ mov bx,[a32 abs es:foo]
+ mov eax,[a32 abs es:foo]
+ mov ebx,[a32 abs es:foo]
+ mov rax,[a32 abs es:foo]
+ mov rbx,[a32 abs es:foo]
+ mov al,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs es:0xbbbbbbbb]
+ mov bl,[a32 abs es:0xbbbbbbbb]
+ mov ax,[a32 abs es:0xbbbbbbbb]
+ mov bx,[a32 abs es:0xbbbbbbbb]
+ mov eax,[a32 abs es:0xbbbbbbbb]
+ mov ebx,[a32 abs es:0xbbbbbbbb]
+ mov rax,[a32 abs es:0xbbbbbbbb]
+ mov rbx,[a32 abs es:0xbbbbbbbb]
+ mov al,[a32 abs es:0xffffffffcccccccc]
+ mov bl,[a32 abs es:0xffffffffcccccccc]
+ mov ax,[a32 abs es:0xffffffffcccccccc]
+ mov bx,[a32 abs es:0xffffffffcccccccc]
+ mov eax,[a32 abs es:0xffffffffcccccccc]
+ mov ebx,[a32 abs es:0xffffffffcccccccc]
+ mov rax,[a32 abs es:0xffffffffcccccccc]
+ mov rbx,[a32 abs es:0xffffffffcccccccc]
+
+ mov al,[a32 abs dword es:foo]
+ mov bl,[a32 abs dword es:foo]
+ mov ax,[a32 abs dword es:foo]
+ mov bx,[a32 abs dword es:foo]
+ mov eax,[a32 abs dword es:foo]
+ mov ebx,[a32 abs dword es:foo]
+ mov rax,[a32 abs dword es:foo]
+ mov rbx,[a32 abs dword es:foo]
+ mov al,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs dword es:0xbbbbbbbb]
+ mov bl,[a32 abs dword es:0xbbbbbbbb]
+ mov ax,[a32 abs dword es:0xbbbbbbbb]
+ mov bx,[a32 abs dword es:0xbbbbbbbb]
+ mov eax,[a32 abs dword es:0xbbbbbbbb]
+ mov ebx,[a32 abs dword es:0xbbbbbbbb]
+ mov rax,[a32 abs dword es:0xbbbbbbbb]
+ mov rbx,[a32 abs dword es:0xbbbbbbbb]
+ mov al,[a32 abs dword es:0xffffffffcccccccc]
+ mov bl,[a32 abs dword es:0xffffffffcccccccc]
+ mov ax,[a32 abs dword es:0xffffffffcccccccc]
+ mov bx,[a32 abs dword es:0xffffffffcccccccc]
+ mov eax,[a32 abs dword es:0xffffffffcccccccc]
+ mov ebx,[a32 abs dword es:0xffffffffcccccccc]
+ mov rax,[a32 abs dword es:0xffffffffcccccccc]
+ mov rbx,[a32 abs dword es:0xffffffffcccccccc]
+
+ mov al,[a32 abs qword es:foo]
+ mov bl,[a32 abs qword es:foo]
+ mov ax,[a32 abs qword es:foo]
+ mov bx,[a32 abs qword es:foo]
+ mov eax,[a32 abs qword es:foo]
+ mov ebx,[a32 abs qword es:foo]
+ mov rax,[a32 abs qword es:foo]
+ mov rbx,[a32 abs qword es:foo]
+ mov al,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs qword es:0xbbbbbbbb]
+ mov bl,[a32 abs qword es:0xbbbbbbbb]
+ mov ax,[a32 abs qword es:0xbbbbbbbb]
+ mov bx,[a32 abs qword es:0xbbbbbbbb]
+ mov eax,[a32 abs qword es:0xbbbbbbbb]
+ mov ebx,[a32 abs qword es:0xbbbbbbbb]
+ mov rax,[a32 abs qword es:0xbbbbbbbb]
+ mov rbx,[a32 abs qword es:0xbbbbbbbb]
+ mov al,[a32 abs qword es:0xffffffffcccccccc]
+ mov bl,[a32 abs qword es:0xffffffffcccccccc]
+ mov ax,[a32 abs qword es:0xffffffffcccccccc]
+ mov bx,[a32 abs qword es:0xffffffffcccccccc]
+ mov eax,[a32 abs qword es:0xffffffffcccccccc]
+ mov ebx,[a32 abs qword es:0xffffffffcccccccc]
+ mov rax,[a32 abs qword es:0xffffffffcccccccc]
+ mov rbx,[a32 abs qword es:0xffffffffcccccccc]
+
+ mov al,[rel es:foo]
+ mov bl,[rel es:foo]
+ mov ax,[rel es:foo]
+ mov bx,[rel es:foo]
+ mov eax,[rel es:foo]
+ mov ebx,[rel es:foo]
+ mov rax,[rel es:foo]
+ mov rbx,[rel es:foo]
+ mov al,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel es:0xbbbbbbbb]
+ mov bl,[rel es:0xbbbbbbbb]
+ mov ax,[rel es:0xbbbbbbbb]
+ mov bx,[rel es:0xbbbbbbbb]
+ mov eax,[rel es:0xbbbbbbbb]
+ mov ebx,[rel es:0xbbbbbbbb]
+ mov rax,[rel es:0xbbbbbbbb]
+ mov rbx,[rel es:0xbbbbbbbb]
+ mov al,[rel es:0xffffffffcccccccc]
+ mov bl,[rel es:0xffffffffcccccccc]
+ mov ax,[rel es:0xffffffffcccccccc]
+ mov bx,[rel es:0xffffffffcccccccc]
+ mov eax,[rel es:0xffffffffcccccccc]
+ mov ebx,[rel es:0xffffffffcccccccc]
+ mov rax,[rel es:0xffffffffcccccccc]
+ mov rbx,[rel es:0xffffffffcccccccc]
+
+ mov al,[rel dword es:foo]
+ mov bl,[rel dword es:foo]
+ mov ax,[rel dword es:foo]
+ mov bx,[rel dword es:foo]
+ mov eax,[rel dword es:foo]
+ mov ebx,[rel dword es:foo]
+ mov rax,[rel dword es:foo]
+ mov rbx,[rel dword es:foo]
+ mov al,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel dword es:0xbbbbbbbb]
+ mov bl,[rel dword es:0xbbbbbbbb]
+ mov ax,[rel dword es:0xbbbbbbbb]
+ mov bx,[rel dword es:0xbbbbbbbb]
+ mov eax,[rel dword es:0xbbbbbbbb]
+ mov ebx,[rel dword es:0xbbbbbbbb]
+ mov rax,[rel dword es:0xbbbbbbbb]
+ mov rbx,[rel dword es:0xbbbbbbbb]
+ mov al,[rel dword es:0xffffffffcccccccc]
+ mov bl,[rel dword es:0xffffffffcccccccc]
+ mov ax,[rel dword es:0xffffffffcccccccc]
+ mov bx,[rel dword es:0xffffffffcccccccc]
+ mov eax,[rel dword es:0xffffffffcccccccc]
+ mov ebx,[rel dword es:0xffffffffcccccccc]
+ mov rax,[rel dword es:0xffffffffcccccccc]
+ mov rbx,[rel dword es:0xffffffffcccccccc]
+
+ mov al,[rel qword es:foo]
+ mov bl,[rel qword es:foo]
+ mov ax,[rel qword es:foo]
+ mov bx,[rel qword es:foo]
+ mov eax,[rel qword es:foo]
+ mov ebx,[rel qword es:foo]
+ mov rax,[rel qword es:foo]
+ mov rbx,[rel qword es:foo]
+ mov al,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel qword es:0xbbbbbbbb]
+ mov bl,[rel qword es:0xbbbbbbbb]
+ mov ax,[rel qword es:0xbbbbbbbb]
+ mov bx,[rel qword es:0xbbbbbbbb]
+ mov eax,[rel qword es:0xbbbbbbbb]
+ mov ebx,[rel qword es:0xbbbbbbbb]
+ mov rax,[rel qword es:0xbbbbbbbb]
+ mov rbx,[rel qword es:0xbbbbbbbb]
+ mov al,[rel qword es:0xffffffffcccccccc]
+ mov bl,[rel qword es:0xffffffffcccccccc]
+ mov ax,[rel qword es:0xffffffffcccccccc]
+ mov bx,[rel qword es:0xffffffffcccccccc]
+ mov eax,[rel qword es:0xffffffffcccccccc]
+ mov ebx,[rel qword es:0xffffffffcccccccc]
+ mov rax,[rel qword es:0xffffffffcccccccc]
+ mov rbx,[rel qword es:0xffffffffcccccccc]
+
+ mov al,[a64 rel es:foo]
+ mov bl,[a64 rel es:foo]
+ mov ax,[a64 rel es:foo]
+ mov bx,[a64 rel es:foo]
+ mov eax,[a64 rel es:foo]
+ mov ebx,[a64 rel es:foo]
+ mov rax,[a64 rel es:foo]
+ mov rbx,[a64 rel es:foo]
+ mov al,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel es:0xbbbbbbbb]
+ mov bl,[a64 rel es:0xbbbbbbbb]
+ mov ax,[a64 rel es:0xbbbbbbbb]
+ mov bx,[a64 rel es:0xbbbbbbbb]
+ mov eax,[a64 rel es:0xbbbbbbbb]
+ mov ebx,[a64 rel es:0xbbbbbbbb]
+ mov rax,[a64 rel es:0xbbbbbbbb]
+ mov rbx,[a64 rel es:0xbbbbbbbb]
+ mov al,[a64 rel es:0xffffffffcccccccc]
+ mov bl,[a64 rel es:0xffffffffcccccccc]
+ mov ax,[a64 rel es:0xffffffffcccccccc]
+ mov bx,[a64 rel es:0xffffffffcccccccc]
+ mov eax,[a64 rel es:0xffffffffcccccccc]
+ mov ebx,[a64 rel es:0xffffffffcccccccc]
+ mov rax,[a64 rel es:0xffffffffcccccccc]
+ mov rbx,[a64 rel es:0xffffffffcccccccc]
+
+ mov al,[a64 rel dword es:foo]
+ mov bl,[a64 rel dword es:foo]
+ mov ax,[a64 rel dword es:foo]
+ mov bx,[a64 rel dword es:foo]
+ mov eax,[a64 rel dword es:foo]
+ mov ebx,[a64 rel dword es:foo]
+ mov rax,[a64 rel dword es:foo]
+ mov rbx,[a64 rel dword es:foo]
+ mov al,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel dword es:0xbbbbbbbb]
+ mov bl,[a64 rel dword es:0xbbbbbbbb]
+ mov ax,[a64 rel dword es:0xbbbbbbbb]
+ mov bx,[a64 rel dword es:0xbbbbbbbb]
+ mov eax,[a64 rel dword es:0xbbbbbbbb]
+ mov ebx,[a64 rel dword es:0xbbbbbbbb]
+ mov rax,[a64 rel dword es:0xbbbbbbbb]
+ mov rbx,[a64 rel dword es:0xbbbbbbbb]
+ mov al,[a64 rel dword es:0xffffffffcccccccc]
+ mov bl,[a64 rel dword es:0xffffffffcccccccc]
+ mov ax,[a64 rel dword es:0xffffffffcccccccc]
+ mov bx,[a64 rel dword es:0xffffffffcccccccc]
+ mov eax,[a64 rel dword es:0xffffffffcccccccc]
+ mov ebx,[a64 rel dword es:0xffffffffcccccccc]
+ mov rax,[a64 rel dword es:0xffffffffcccccccc]
+ mov rbx,[a64 rel dword es:0xffffffffcccccccc]
+
+ mov al,[a64 rel qword es:foo]
+ mov bl,[a64 rel qword es:foo]
+ mov ax,[a64 rel qword es:foo]
+ mov bx,[a64 rel qword es:foo]
+ mov eax,[a64 rel qword es:foo]
+ mov ebx,[a64 rel qword es:foo]
+ mov rax,[a64 rel qword es:foo]
+ mov rbx,[a64 rel qword es:foo]
+ mov al,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel qword es:0xbbbbbbbb]
+ mov bl,[a64 rel qword es:0xbbbbbbbb]
+ mov ax,[a64 rel qword es:0xbbbbbbbb]
+ mov bx,[a64 rel qword es:0xbbbbbbbb]
+ mov eax,[a64 rel qword es:0xbbbbbbbb]
+ mov ebx,[a64 rel qword es:0xbbbbbbbb]
+ mov rax,[a64 rel qword es:0xbbbbbbbb]
+ mov rbx,[a64 rel qword es:0xbbbbbbbb]
+ mov al,[a64 rel qword es:0xffffffffcccccccc]
+ mov bl,[a64 rel qword es:0xffffffffcccccccc]
+ mov ax,[a64 rel qword es:0xffffffffcccccccc]
+ mov bx,[a64 rel qword es:0xffffffffcccccccc]
+ mov eax,[a64 rel qword es:0xffffffffcccccccc]
+ mov ebx,[a64 rel qword es:0xffffffffcccccccc]
+ mov rax,[a64 rel qword es:0xffffffffcccccccc]
+ mov rbx,[a64 rel qword es:0xffffffffcccccccc]
+
+ mov al,[a32 rel es:foo]
+ mov bl,[a32 rel es:foo]
+ mov ax,[a32 rel es:foo]
+ mov bx,[a32 rel es:foo]
+ mov eax,[a32 rel es:foo]
+ mov ebx,[a32 rel es:foo]
+ mov rax,[a32 rel es:foo]
+ mov rbx,[a32 rel es:foo]
+ mov al,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel es:0xbbbbbbbb]
+ mov bl,[a32 rel es:0xbbbbbbbb]
+ mov ax,[a32 rel es:0xbbbbbbbb]
+ mov bx,[a32 rel es:0xbbbbbbbb]
+ mov eax,[a32 rel es:0xbbbbbbbb]
+ mov ebx,[a32 rel es:0xbbbbbbbb]
+ mov rax,[a32 rel es:0xbbbbbbbb]
+ mov rbx,[a32 rel es:0xbbbbbbbb]
+ mov al,[a32 rel es:0xffffffffcccccccc]
+ mov bl,[a32 rel es:0xffffffffcccccccc]
+ mov ax,[a32 rel es:0xffffffffcccccccc]
+ mov bx,[a32 rel es:0xffffffffcccccccc]
+ mov eax,[a32 rel es:0xffffffffcccccccc]
+ mov ebx,[a32 rel es:0xffffffffcccccccc]
+ mov rax,[a32 rel es:0xffffffffcccccccc]
+ mov rbx,[a32 rel es:0xffffffffcccccccc]
+
+ mov al,[a32 rel dword es:foo]
+ mov bl,[a32 rel dword es:foo]
+ mov ax,[a32 rel dword es:foo]
+ mov bx,[a32 rel dword es:foo]
+ mov eax,[a32 rel dword es:foo]
+ mov ebx,[a32 rel dword es:foo]
+ mov rax,[a32 rel dword es:foo]
+ mov rbx,[a32 rel dword es:foo]
+ mov al,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel dword es:0xbbbbbbbb]
+ mov bl,[a32 rel dword es:0xbbbbbbbb]
+ mov ax,[a32 rel dword es:0xbbbbbbbb]
+ mov bx,[a32 rel dword es:0xbbbbbbbb]
+ mov eax,[a32 rel dword es:0xbbbbbbbb]
+ mov ebx,[a32 rel dword es:0xbbbbbbbb]
+ mov rax,[a32 rel dword es:0xbbbbbbbb]
+ mov rbx,[a32 rel dword es:0xbbbbbbbb]
+ mov al,[a32 rel dword es:0xffffffffcccccccc]
+ mov bl,[a32 rel dword es:0xffffffffcccccccc]
+ mov ax,[a32 rel dword es:0xffffffffcccccccc]
+ mov bx,[a32 rel dword es:0xffffffffcccccccc]
+ mov eax,[a32 rel dword es:0xffffffffcccccccc]
+ mov ebx,[a32 rel dword es:0xffffffffcccccccc]
+ mov rax,[a32 rel dword es:0xffffffffcccccccc]
+ mov rbx,[a32 rel dword es:0xffffffffcccccccc]
+
+ mov al,[a32 rel qword es:foo]
+ mov bl,[a32 rel qword es:foo]
+ mov ax,[a32 rel qword es:foo]
+ mov bx,[a32 rel qword es:foo]
+ mov eax,[a32 rel qword es:foo]
+ mov ebx,[a32 rel qword es:foo]
+ mov rax,[a32 rel qword es:foo]
+ mov rbx,[a32 rel qword es:foo]
+ mov al,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel qword es:0xbbbbbbbb]
+ mov bl,[a32 rel qword es:0xbbbbbbbb]
+ mov ax,[a32 rel qword es:0xbbbbbbbb]
+ mov bx,[a32 rel qword es:0xbbbbbbbb]
+ mov eax,[a32 rel qword es:0xbbbbbbbb]
+ mov ebx,[a32 rel qword es:0xbbbbbbbb]
+ mov rax,[a32 rel qword es:0xbbbbbbbb]
+ mov rbx,[a32 rel qword es:0xbbbbbbbb]
+ mov al,[a32 rel qword es:0xffffffffcccccccc]
+ mov bl,[a32 rel qword es:0xffffffffcccccccc]
+ mov ax,[a32 rel qword es:0xffffffffcccccccc]
+ mov bx,[a32 rel qword es:0xffffffffcccccccc]
+ mov eax,[a32 rel qword es:0xffffffffcccccccc]
+ mov ebx,[a32 rel qword es:0xffffffffcccccccc]
+ mov rax,[a32 rel qword es:0xffffffffcccccccc]
+ mov rbx,[a32 rel qword es:0xffffffffcccccccc]
+
+
+ default rel
+
+ mov al,[foo]
+ mov bl,[foo]
+ mov ax,[foo]
+ mov bx,[foo]
+ mov eax,[foo]
+ mov ebx,[foo]
+ mov rax,[foo]
+ mov rbx,[foo]
+ mov al,[0xaaaaaaaaaaaaaaaa]
+ mov bl,[0xaaaaaaaaaaaaaaaa]
+ mov ax,[0xaaaaaaaaaaaaaaaa]
+ mov bx,[0xaaaaaaaaaaaaaaaa]
+ mov eax,[0xaaaaaaaaaaaaaaaa]
+ mov ebx,[0xaaaaaaaaaaaaaaaa]
+ mov rax,[0xaaaaaaaaaaaaaaaa]
+ mov rbx,[0xaaaaaaaaaaaaaaaa]
+ mov al,[0xbbbbbbbb]
+ mov bl,[0xbbbbbbbb]
+ mov ax,[0xbbbbbbbb]
+ mov bx,[0xbbbbbbbb]
+ mov eax,[0xbbbbbbbb]
+ mov ebx,[0xbbbbbbbb]
+ mov rax,[0xbbbbbbbb]
+ mov rbx,[0xbbbbbbbb]
+ mov al,[0xffffffffcccccccc]
+ mov bl,[0xffffffffcccccccc]
+ mov ax,[0xffffffffcccccccc]
+ mov bx,[0xffffffffcccccccc]
+ mov eax,[0xffffffffcccccccc]
+ mov ebx,[0xffffffffcccccccc]
+ mov rax,[0xffffffffcccccccc]
+ mov rbx,[0xffffffffcccccccc]
+
+ mov al,[dword foo]
+ mov bl,[dword foo]
+ mov ax,[dword foo]
+ mov bx,[dword foo]
+ mov eax,[dword foo]
+ mov ebx,[dword foo]
+ mov rax,[dword foo]
+ mov rbx,[dword foo]
+ mov al,[dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[dword 0xbbbbbbbb]
+ mov bl,[dword 0xbbbbbbbb]
+ mov ax,[dword 0xbbbbbbbb]
+ mov bx,[dword 0xbbbbbbbb]
+ mov eax,[dword 0xbbbbbbbb]
+ mov ebx,[dword 0xbbbbbbbb]
+ mov rax,[dword 0xbbbbbbbb]
+ mov rbx,[dword 0xbbbbbbbb]
+ mov al,[dword 0xffffffffcccccccc]
+ mov bl,[dword 0xffffffffcccccccc]
+ mov ax,[dword 0xffffffffcccccccc]
+ mov bx,[dword 0xffffffffcccccccc]
+ mov eax,[dword 0xffffffffcccccccc]
+ mov ebx,[dword 0xffffffffcccccccc]
+ mov rax,[dword 0xffffffffcccccccc]
+ mov rbx,[dword 0xffffffffcccccccc]
+
+ mov al,[qword foo]
+ mov bl,[qword foo]
+ mov ax,[qword foo]
+ mov bx,[qword foo]
+ mov eax,[qword foo]
+ mov ebx,[qword foo]
+ mov rax,[qword foo]
+ mov rbx,[qword foo]
+ mov al,[qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[qword 0xbbbbbbbb]
+ mov bl,[qword 0xbbbbbbbb]
+ mov ax,[qword 0xbbbbbbbb]
+ mov bx,[qword 0xbbbbbbbb]
+ mov eax,[qword 0xbbbbbbbb]
+ mov ebx,[qword 0xbbbbbbbb]
+ mov rax,[qword 0xbbbbbbbb]
+ mov rbx,[qword 0xbbbbbbbb]
+ mov al,[qword 0xffffffffcccccccc]
+ mov bl,[qword 0xffffffffcccccccc]
+ mov ax,[qword 0xffffffffcccccccc]
+ mov bx,[qword 0xffffffffcccccccc]
+ mov eax,[qword 0xffffffffcccccccc]
+ mov ebx,[qword 0xffffffffcccccccc]
+ mov rax,[qword 0xffffffffcccccccc]
+ mov rbx,[qword 0xffffffffcccccccc]
+
+ mov al,[a64 foo]
+ mov bl,[a64 foo]
+ mov ax,[a64 foo]
+ mov bx,[a64 foo]
+ mov eax,[a64 foo]
+ mov ebx,[a64 foo]
+ mov rax,[a64 foo]
+ mov rbx,[a64 foo]
+ mov al,[a64 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 0xbbbbbbbb]
+ mov bl,[a64 0xbbbbbbbb]
+ mov ax,[a64 0xbbbbbbbb]
+ mov bx,[a64 0xbbbbbbbb]
+ mov eax,[a64 0xbbbbbbbb]
+ mov ebx,[a64 0xbbbbbbbb]
+ mov rax,[a64 0xbbbbbbbb]
+ mov rbx,[a64 0xbbbbbbbb]
+ mov al,[a64 0xffffffffcccccccc]
+ mov bl,[a64 0xffffffffcccccccc]
+ mov ax,[a64 0xffffffffcccccccc]
+ mov bx,[a64 0xffffffffcccccccc]
+ mov eax,[a64 0xffffffffcccccccc]
+ mov ebx,[a64 0xffffffffcccccccc]
+ mov rax,[a64 0xffffffffcccccccc]
+ mov rbx,[a64 0xffffffffcccccccc]
+
+ mov al,[a64 dword foo]
+ mov bl,[a64 dword foo]
+ mov ax,[a64 dword foo]
+ mov bx,[a64 dword foo]
+ mov eax,[a64 dword foo]
+ mov ebx,[a64 dword foo]
+ mov rax,[a64 dword foo]
+ mov rbx,[a64 dword foo]
+ mov al,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 dword 0xbbbbbbbb]
+ mov bl,[a64 dword 0xbbbbbbbb]
+ mov ax,[a64 dword 0xbbbbbbbb]
+ mov bx,[a64 dword 0xbbbbbbbb]
+ mov eax,[a64 dword 0xbbbbbbbb]
+ mov ebx,[a64 dword 0xbbbbbbbb]
+ mov rax,[a64 dword 0xbbbbbbbb]
+ mov rbx,[a64 dword 0xbbbbbbbb]
+ mov al,[a64 dword 0xffffffffcccccccc]
+ mov bl,[a64 dword 0xffffffffcccccccc]
+ mov ax,[a64 dword 0xffffffffcccccccc]
+ mov bx,[a64 dword 0xffffffffcccccccc]
+ mov eax,[a64 dword 0xffffffffcccccccc]
+ mov ebx,[a64 dword 0xffffffffcccccccc]
+ mov rax,[a64 dword 0xffffffffcccccccc]
+ mov rbx,[a64 dword 0xffffffffcccccccc]
+
+ mov al,[a64 qword foo]
+ mov bl,[a64 qword foo]
+ mov ax,[a64 qword foo]
+ mov bx,[a64 qword foo]
+ mov eax,[a64 qword foo]
+ mov ebx,[a64 qword foo]
+ mov rax,[a64 qword foo]
+ mov rbx,[a64 qword foo]
+ mov al,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 qword 0xbbbbbbbb]
+ mov bl,[a64 qword 0xbbbbbbbb]
+ mov ax,[a64 qword 0xbbbbbbbb]
+ mov bx,[a64 qword 0xbbbbbbbb]
+ mov eax,[a64 qword 0xbbbbbbbb]
+ mov ebx,[a64 qword 0xbbbbbbbb]
+ mov rax,[a64 qword 0xbbbbbbbb]
+ mov rbx,[a64 qword 0xbbbbbbbb]
+ mov al,[a64 qword 0xffffffffcccccccc]
+ mov bl,[a64 qword 0xffffffffcccccccc]
+ mov ax,[a64 qword 0xffffffffcccccccc]
+ mov bx,[a64 qword 0xffffffffcccccccc]
+ mov eax,[a64 qword 0xffffffffcccccccc]
+ mov ebx,[a64 qword 0xffffffffcccccccc]
+ mov rax,[a64 qword 0xffffffffcccccccc]
+ mov rbx,[a64 qword 0xffffffffcccccccc]
+
+ mov al,[a32 foo]
+ mov bl,[a32 foo]
+ mov ax,[a32 foo]
+ mov bx,[a32 foo]
+ mov eax,[a32 foo]
+ mov ebx,[a32 foo]
+ mov rax,[a32 foo]
+ mov rbx,[a32 foo]
+ mov al,[a32 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 0xbbbbbbbb]
+ mov bl,[a32 0xbbbbbbbb]
+ mov ax,[a32 0xbbbbbbbb]
+ mov bx,[a32 0xbbbbbbbb]
+ mov eax,[a32 0xbbbbbbbb]
+ mov ebx,[a32 0xbbbbbbbb]
+ mov rax,[a32 0xbbbbbbbb]
+ mov rbx,[a32 0xbbbbbbbb]
+ mov al,[a32 0xffffffffcccccccc]
+ mov bl,[a32 0xffffffffcccccccc]
+ mov ax,[a32 0xffffffffcccccccc]
+ mov bx,[a32 0xffffffffcccccccc]
+ mov eax,[a32 0xffffffffcccccccc]
+ mov ebx,[a32 0xffffffffcccccccc]
+ mov rax,[a32 0xffffffffcccccccc]
+ mov rbx,[a32 0xffffffffcccccccc]
+
+ mov al,[a32 dword foo]
+ mov bl,[a32 dword foo]
+ mov ax,[a32 dword foo]
+ mov bx,[a32 dword foo]
+ mov eax,[a32 dword foo]
+ mov ebx,[a32 dword foo]
+ mov rax,[a32 dword foo]
+ mov rbx,[a32 dword foo]
+ mov al,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 dword 0xbbbbbbbb]
+ mov bl,[a32 dword 0xbbbbbbbb]
+ mov ax,[a32 dword 0xbbbbbbbb]
+ mov bx,[a32 dword 0xbbbbbbbb]
+ mov eax,[a32 dword 0xbbbbbbbb]
+ mov ebx,[a32 dword 0xbbbbbbbb]
+ mov rax,[a32 dword 0xbbbbbbbb]
+ mov rbx,[a32 dword 0xbbbbbbbb]
+ mov al,[a32 dword 0xffffffffcccccccc]
+ mov bl,[a32 dword 0xffffffffcccccccc]
+ mov ax,[a32 dword 0xffffffffcccccccc]
+ mov bx,[a32 dword 0xffffffffcccccccc]
+ mov eax,[a32 dword 0xffffffffcccccccc]
+ mov ebx,[a32 dword 0xffffffffcccccccc]
+ mov rax,[a32 dword 0xffffffffcccccccc]
+ mov rbx,[a32 dword 0xffffffffcccccccc]
+
+ mov al,[a32 qword foo]
+ mov bl,[a32 qword foo]
+ mov ax,[a32 qword foo]
+ mov bx,[a32 qword foo]
+ mov eax,[a32 qword foo]
+ mov ebx,[a32 qword foo]
+ mov rax,[a32 qword foo]
+ mov rbx,[a32 qword foo]
+ mov al,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 qword 0xbbbbbbbb]
+ mov bl,[a32 qword 0xbbbbbbbb]
+ mov ax,[a32 qword 0xbbbbbbbb]
+ mov bx,[a32 qword 0xbbbbbbbb]
+ mov eax,[a32 qword 0xbbbbbbbb]
+ mov ebx,[a32 qword 0xbbbbbbbb]
+ mov rax,[a32 qword 0xbbbbbbbb]
+ mov rbx,[a32 qword 0xbbbbbbbb]
+ mov al,[a32 qword 0xffffffffcccccccc]
+ mov bl,[a32 qword 0xffffffffcccccccc]
+ mov ax,[a32 qword 0xffffffffcccccccc]
+ mov bx,[a32 qword 0xffffffffcccccccc]
+ mov eax,[a32 qword 0xffffffffcccccccc]
+ mov ebx,[a32 qword 0xffffffffcccccccc]
+ mov rax,[a32 qword 0xffffffffcccccccc]
+ mov rbx,[a32 qword 0xffffffffcccccccc]
+
+ mov al,[abs foo]
+ mov bl,[abs foo]
+ mov ax,[abs foo]
+ mov bx,[abs foo]
+ mov eax,[abs foo]
+ mov ebx,[abs foo]
+ mov rax,[abs foo]
+ mov rbx,[abs foo]
+ mov al,[abs 0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs 0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs 0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs 0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs 0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs 0xaaaaaaaaaaaaaaaa]
+ mov al,[abs 0xbbbbbbbb]
+ mov bl,[abs 0xbbbbbbbb]
+ mov ax,[abs 0xbbbbbbbb]
+ mov bx,[abs 0xbbbbbbbb]
+ mov eax,[abs 0xbbbbbbbb]
+ mov ebx,[abs 0xbbbbbbbb]
+ mov rax,[abs 0xbbbbbbbb]
+ mov rbx,[abs 0xbbbbbbbb]
+ mov al,[abs 0xffffffffcccccccc]
+ mov bl,[abs 0xffffffffcccccccc]
+ mov ax,[abs 0xffffffffcccccccc]
+ mov bx,[abs 0xffffffffcccccccc]
+ mov eax,[abs 0xffffffffcccccccc]
+ mov ebx,[abs 0xffffffffcccccccc]
+ mov rax,[abs 0xffffffffcccccccc]
+ mov rbx,[abs 0xffffffffcccccccc]
+
+ mov al,[abs dword foo]
+ mov bl,[abs dword foo]
+ mov ax,[abs dword foo]
+ mov bx,[abs dword foo]
+ mov eax,[abs dword foo]
+ mov ebx,[abs dword foo]
+ mov rax,[abs dword foo]
+ mov rbx,[abs dword foo]
+ mov al,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[abs dword 0xbbbbbbbb]
+ mov bl,[abs dword 0xbbbbbbbb]
+ mov ax,[abs dword 0xbbbbbbbb]
+ mov bx,[abs dword 0xbbbbbbbb]
+ mov eax,[abs dword 0xbbbbbbbb]
+ mov ebx,[abs dword 0xbbbbbbbb]
+ mov rax,[abs dword 0xbbbbbbbb]
+ mov rbx,[abs dword 0xbbbbbbbb]
+ mov al,[abs dword 0xffffffffcccccccc]
+ mov bl,[abs dword 0xffffffffcccccccc]
+ mov ax,[abs dword 0xffffffffcccccccc]
+ mov bx,[abs dword 0xffffffffcccccccc]
+ mov eax,[abs dword 0xffffffffcccccccc]
+ mov ebx,[abs dword 0xffffffffcccccccc]
+ mov rax,[abs dword 0xffffffffcccccccc]
+ mov rbx,[abs dword 0xffffffffcccccccc]
+
+ mov al,[abs qword foo]
+ mov bl,[abs qword foo]
+ mov ax,[abs qword foo]
+ mov bx,[abs qword foo]
+ mov eax,[abs qword foo]
+ mov ebx,[abs qword foo]
+ mov rax,[abs qword foo]
+ mov rbx,[abs qword foo]
+ mov al,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[abs qword 0xbbbbbbbb]
+ mov bl,[abs qword 0xbbbbbbbb]
+ mov ax,[abs qword 0xbbbbbbbb]
+ mov bx,[abs qword 0xbbbbbbbb]
+ mov eax,[abs qword 0xbbbbbbbb]
+ mov ebx,[abs qword 0xbbbbbbbb]
+ mov rax,[abs qword 0xbbbbbbbb]
+ mov rbx,[abs qword 0xbbbbbbbb]
+ mov al,[abs qword 0xffffffffcccccccc]
+ mov bl,[abs qword 0xffffffffcccccccc]
+ mov ax,[abs qword 0xffffffffcccccccc]
+ mov bx,[abs qword 0xffffffffcccccccc]
+ mov eax,[abs qword 0xffffffffcccccccc]
+ mov ebx,[abs qword 0xffffffffcccccccc]
+ mov rax,[abs qword 0xffffffffcccccccc]
+ mov rbx,[abs qword 0xffffffffcccccccc]
+
+ mov al,[a64 abs foo]
+ mov bl,[a64 abs foo]
+ mov ax,[a64 abs foo]
+ mov bx,[a64 abs foo]
+ mov eax,[a64 abs foo]
+ mov ebx,[a64 abs foo]
+ mov rax,[a64 abs foo]
+ mov rbx,[a64 abs foo]
+ mov al,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs 0xbbbbbbbb]
+ mov bl,[a64 abs 0xbbbbbbbb]
+ mov ax,[a64 abs 0xbbbbbbbb]
+ mov bx,[a64 abs 0xbbbbbbbb]
+ mov eax,[a64 abs 0xbbbbbbbb]
+ mov ebx,[a64 abs 0xbbbbbbbb]
+ mov rax,[a64 abs 0xbbbbbbbb]
+ mov rbx,[a64 abs 0xbbbbbbbb]
+ mov al,[a64 abs 0xffffffffcccccccc]
+ mov bl,[a64 abs 0xffffffffcccccccc]
+ mov ax,[a64 abs 0xffffffffcccccccc]
+ mov bx,[a64 abs 0xffffffffcccccccc]
+ mov eax,[a64 abs 0xffffffffcccccccc]
+ mov ebx,[a64 abs 0xffffffffcccccccc]
+ mov rax,[a64 abs 0xffffffffcccccccc]
+ mov rbx,[a64 abs 0xffffffffcccccccc]
+
+ mov al,[a64 abs dword foo]
+ mov bl,[a64 abs dword foo]
+ mov ax,[a64 abs dword foo]
+ mov bx,[a64 abs dword foo]
+ mov eax,[a64 abs dword foo]
+ mov ebx,[a64 abs dword foo]
+ mov rax,[a64 abs dword foo]
+ mov rbx,[a64 abs dword foo]
+ mov al,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs dword 0xbbbbbbbb]
+ mov bl,[a64 abs dword 0xbbbbbbbb]
+ mov ax,[a64 abs dword 0xbbbbbbbb]
+ mov bx,[a64 abs dword 0xbbbbbbbb]
+ mov eax,[a64 abs dword 0xbbbbbbbb]
+ mov ebx,[a64 abs dword 0xbbbbbbbb]
+ mov rax,[a64 abs dword 0xbbbbbbbb]
+ mov rbx,[a64 abs dword 0xbbbbbbbb]
+ mov al,[a64 abs dword 0xffffffffcccccccc]
+ mov bl,[a64 abs dword 0xffffffffcccccccc]
+ mov ax,[a64 abs dword 0xffffffffcccccccc]
+ mov bx,[a64 abs dword 0xffffffffcccccccc]
+ mov eax,[a64 abs dword 0xffffffffcccccccc]
+ mov ebx,[a64 abs dword 0xffffffffcccccccc]
+ mov rax,[a64 abs dword 0xffffffffcccccccc]
+ mov rbx,[a64 abs dword 0xffffffffcccccccc]
+
+ mov al,[a64 abs qword foo]
+ mov bl,[a64 abs qword foo]
+ mov ax,[a64 abs qword foo]
+ mov bx,[a64 abs qword foo]
+ mov eax,[a64 abs qword foo]
+ mov ebx,[a64 abs qword foo]
+ mov rax,[a64 abs qword foo]
+ mov rbx,[a64 abs qword foo]
+ mov al,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs qword 0xbbbbbbbb]
+ mov bl,[a64 abs qword 0xbbbbbbbb]
+ mov ax,[a64 abs qword 0xbbbbbbbb]
+ mov bx,[a64 abs qword 0xbbbbbbbb]
+ mov eax,[a64 abs qword 0xbbbbbbbb]
+ mov ebx,[a64 abs qword 0xbbbbbbbb]
+ mov rax,[a64 abs qword 0xbbbbbbbb]
+ mov rbx,[a64 abs qword 0xbbbbbbbb]
+ mov al,[a64 abs qword 0xffffffffcccccccc]
+ mov bl,[a64 abs qword 0xffffffffcccccccc]
+ mov ax,[a64 abs qword 0xffffffffcccccccc]
+ mov bx,[a64 abs qword 0xffffffffcccccccc]
+ mov eax,[a64 abs qword 0xffffffffcccccccc]
+ mov ebx,[a64 abs qword 0xffffffffcccccccc]
+ mov rax,[a64 abs qword 0xffffffffcccccccc]
+ mov rbx,[a64 abs qword 0xffffffffcccccccc]
+
+ mov al,[a32 abs foo]
+ mov bl,[a32 abs foo]
+ mov ax,[a32 abs foo]
+ mov bx,[a32 abs foo]
+ mov eax,[a32 abs foo]
+ mov ebx,[a32 abs foo]
+ mov rax,[a32 abs foo]
+ mov rbx,[a32 abs foo]
+ mov al,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs 0xbbbbbbbb]
+ mov bl,[a32 abs 0xbbbbbbbb]
+ mov ax,[a32 abs 0xbbbbbbbb]
+ mov bx,[a32 abs 0xbbbbbbbb]
+ mov eax,[a32 abs 0xbbbbbbbb]
+ mov ebx,[a32 abs 0xbbbbbbbb]
+ mov rax,[a32 abs 0xbbbbbbbb]
+ mov rbx,[a32 abs 0xbbbbbbbb]
+ mov al,[a32 abs 0xffffffffcccccccc]
+ mov bl,[a32 abs 0xffffffffcccccccc]
+ mov ax,[a32 abs 0xffffffffcccccccc]
+ mov bx,[a32 abs 0xffffffffcccccccc]
+ mov eax,[a32 abs 0xffffffffcccccccc]
+ mov ebx,[a32 abs 0xffffffffcccccccc]
+ mov rax,[a32 abs 0xffffffffcccccccc]
+ mov rbx,[a32 abs 0xffffffffcccccccc]
+
+ mov al,[a32 abs dword foo]
+ mov bl,[a32 abs dword foo]
+ mov ax,[a32 abs dword foo]
+ mov bx,[a32 abs dword foo]
+ mov eax,[a32 abs dword foo]
+ mov ebx,[a32 abs dword foo]
+ mov rax,[a32 abs dword foo]
+ mov rbx,[a32 abs dword foo]
+ mov al,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs dword 0xbbbbbbbb]
+ mov bl,[a32 abs dword 0xbbbbbbbb]
+ mov ax,[a32 abs dword 0xbbbbbbbb]
+ mov bx,[a32 abs dword 0xbbbbbbbb]
+ mov eax,[a32 abs dword 0xbbbbbbbb]
+ mov ebx,[a32 abs dword 0xbbbbbbbb]
+ mov rax,[a32 abs dword 0xbbbbbbbb]
+ mov rbx,[a32 abs dword 0xbbbbbbbb]
+ mov al,[a32 abs dword 0xffffffffcccccccc]
+ mov bl,[a32 abs dword 0xffffffffcccccccc]
+ mov ax,[a32 abs dword 0xffffffffcccccccc]
+ mov bx,[a32 abs dword 0xffffffffcccccccc]
+ mov eax,[a32 abs dword 0xffffffffcccccccc]
+ mov ebx,[a32 abs dword 0xffffffffcccccccc]
+ mov rax,[a32 abs dword 0xffffffffcccccccc]
+ mov rbx,[a32 abs dword 0xffffffffcccccccc]
+
+ mov al,[a32 abs qword foo]
+ mov bl,[a32 abs qword foo]
+ mov ax,[a32 abs qword foo]
+ mov bx,[a32 abs qword foo]
+ mov eax,[a32 abs qword foo]
+ mov ebx,[a32 abs qword foo]
+ mov rax,[a32 abs qword foo]
+ mov rbx,[a32 abs qword foo]
+ mov al,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs qword 0xbbbbbbbb]
+ mov bl,[a32 abs qword 0xbbbbbbbb]
+ mov ax,[a32 abs qword 0xbbbbbbbb]
+ mov bx,[a32 abs qword 0xbbbbbbbb]
+ mov eax,[a32 abs qword 0xbbbbbbbb]
+ mov ebx,[a32 abs qword 0xbbbbbbbb]
+ mov rax,[a32 abs qword 0xbbbbbbbb]
+ mov rbx,[a32 abs qword 0xbbbbbbbb]
+ mov al,[a32 abs qword 0xffffffffcccccccc]
+ mov bl,[a32 abs qword 0xffffffffcccccccc]
+ mov ax,[a32 abs qword 0xffffffffcccccccc]
+ mov bx,[a32 abs qword 0xffffffffcccccccc]
+ mov eax,[a32 abs qword 0xffffffffcccccccc]
+ mov ebx,[a32 abs qword 0xffffffffcccccccc]
+ mov rax,[a32 abs qword 0xffffffffcccccccc]
+ mov rbx,[a32 abs qword 0xffffffffcccccccc]
+
+ mov al,[rel foo]
+ mov bl,[rel foo]
+ mov ax,[rel foo]
+ mov bx,[rel foo]
+ mov eax,[rel foo]
+ mov ebx,[rel foo]
+ mov rax,[rel foo]
+ mov rbx,[rel foo]
+ mov al,[rel 0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel 0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel 0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel 0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel 0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel 0xaaaaaaaaaaaaaaaa]
+ mov al,[rel 0xbbbbbbbb]
+ mov bl,[rel 0xbbbbbbbb]
+ mov ax,[rel 0xbbbbbbbb]
+ mov bx,[rel 0xbbbbbbbb]
+ mov eax,[rel 0xbbbbbbbb]
+ mov ebx,[rel 0xbbbbbbbb]
+ mov rax,[rel 0xbbbbbbbb]
+ mov rbx,[rel 0xbbbbbbbb]
+ mov al,[rel 0xffffffffcccccccc]
+ mov bl,[rel 0xffffffffcccccccc]
+ mov ax,[rel 0xffffffffcccccccc]
+ mov bx,[rel 0xffffffffcccccccc]
+ mov eax,[rel 0xffffffffcccccccc]
+ mov ebx,[rel 0xffffffffcccccccc]
+ mov rax,[rel 0xffffffffcccccccc]
+ mov rbx,[rel 0xffffffffcccccccc]
+
+ mov al,[rel dword foo]
+ mov bl,[rel dword foo]
+ mov ax,[rel dword foo]
+ mov bx,[rel dword foo]
+ mov eax,[rel dword foo]
+ mov ebx,[rel dword foo]
+ mov rax,[rel dword foo]
+ mov rbx,[rel dword foo]
+ mov al,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[rel dword 0xbbbbbbbb]
+ mov bl,[rel dword 0xbbbbbbbb]
+ mov ax,[rel dword 0xbbbbbbbb]
+ mov bx,[rel dword 0xbbbbbbbb]
+ mov eax,[rel dword 0xbbbbbbbb]
+ mov ebx,[rel dword 0xbbbbbbbb]
+ mov rax,[rel dword 0xbbbbbbbb]
+ mov rbx,[rel dword 0xbbbbbbbb]
+ mov al,[rel dword 0xffffffffcccccccc]
+ mov bl,[rel dword 0xffffffffcccccccc]
+ mov ax,[rel dword 0xffffffffcccccccc]
+ mov bx,[rel dword 0xffffffffcccccccc]
+ mov eax,[rel dword 0xffffffffcccccccc]
+ mov ebx,[rel dword 0xffffffffcccccccc]
+ mov rax,[rel dword 0xffffffffcccccccc]
+ mov rbx,[rel dword 0xffffffffcccccccc]
+
+ mov al,[rel qword foo]
+ mov bl,[rel qword foo]
+ mov ax,[rel qword foo]
+ mov bx,[rel qword foo]
+ mov eax,[rel qword foo]
+ mov ebx,[rel qword foo]
+ mov rax,[rel qword foo]
+ mov rbx,[rel qword foo]
+ mov al,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[rel qword 0xbbbbbbbb]
+ mov bl,[rel qword 0xbbbbbbbb]
+ mov ax,[rel qword 0xbbbbbbbb]
+ mov bx,[rel qword 0xbbbbbbbb]
+ mov eax,[rel qword 0xbbbbbbbb]
+ mov ebx,[rel qword 0xbbbbbbbb]
+ mov rax,[rel qword 0xbbbbbbbb]
+ mov rbx,[rel qword 0xbbbbbbbb]
+ mov al,[rel qword 0xffffffffcccccccc]
+ mov bl,[rel qword 0xffffffffcccccccc]
+ mov ax,[rel qword 0xffffffffcccccccc]
+ mov bx,[rel qword 0xffffffffcccccccc]
+ mov eax,[rel qword 0xffffffffcccccccc]
+ mov ebx,[rel qword 0xffffffffcccccccc]
+ mov rax,[rel qword 0xffffffffcccccccc]
+ mov rbx,[rel qword 0xffffffffcccccccc]
+
+ mov al,[a64 rel foo]
+ mov bl,[a64 rel foo]
+ mov ax,[a64 rel foo]
+ mov bx,[a64 rel foo]
+ mov eax,[a64 rel foo]
+ mov ebx,[a64 rel foo]
+ mov rax,[a64 rel foo]
+ mov rbx,[a64 rel foo]
+ mov al,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel 0xbbbbbbbb]
+ mov bl,[a64 rel 0xbbbbbbbb]
+ mov ax,[a64 rel 0xbbbbbbbb]
+ mov bx,[a64 rel 0xbbbbbbbb]
+ mov eax,[a64 rel 0xbbbbbbbb]
+ mov ebx,[a64 rel 0xbbbbbbbb]
+ mov rax,[a64 rel 0xbbbbbbbb]
+ mov rbx,[a64 rel 0xbbbbbbbb]
+ mov al,[a64 rel 0xffffffffcccccccc]
+ mov bl,[a64 rel 0xffffffffcccccccc]
+ mov ax,[a64 rel 0xffffffffcccccccc]
+ mov bx,[a64 rel 0xffffffffcccccccc]
+ mov eax,[a64 rel 0xffffffffcccccccc]
+ mov ebx,[a64 rel 0xffffffffcccccccc]
+ mov rax,[a64 rel 0xffffffffcccccccc]
+ mov rbx,[a64 rel 0xffffffffcccccccc]
+
+ mov al,[a64 rel dword foo]
+ mov bl,[a64 rel dword foo]
+ mov ax,[a64 rel dword foo]
+ mov bx,[a64 rel dword foo]
+ mov eax,[a64 rel dword foo]
+ mov ebx,[a64 rel dword foo]
+ mov rax,[a64 rel dword foo]
+ mov rbx,[a64 rel dword foo]
+ mov al,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel dword 0xbbbbbbbb]
+ mov bl,[a64 rel dword 0xbbbbbbbb]
+ mov ax,[a64 rel dword 0xbbbbbbbb]
+ mov bx,[a64 rel dword 0xbbbbbbbb]
+ mov eax,[a64 rel dword 0xbbbbbbbb]
+ mov ebx,[a64 rel dword 0xbbbbbbbb]
+ mov rax,[a64 rel dword 0xbbbbbbbb]
+ mov rbx,[a64 rel dword 0xbbbbbbbb]
+ mov al,[a64 rel dword 0xffffffffcccccccc]
+ mov bl,[a64 rel dword 0xffffffffcccccccc]
+ mov ax,[a64 rel dword 0xffffffffcccccccc]
+ mov bx,[a64 rel dword 0xffffffffcccccccc]
+ mov eax,[a64 rel dword 0xffffffffcccccccc]
+ mov ebx,[a64 rel dword 0xffffffffcccccccc]
+ mov rax,[a64 rel dword 0xffffffffcccccccc]
+ mov rbx,[a64 rel dword 0xffffffffcccccccc]
+
+ mov al,[a64 rel qword foo]
+ mov bl,[a64 rel qword foo]
+ mov ax,[a64 rel qword foo]
+ mov bx,[a64 rel qword foo]
+ mov eax,[a64 rel qword foo]
+ mov ebx,[a64 rel qword foo]
+ mov rax,[a64 rel qword foo]
+ mov rbx,[a64 rel qword foo]
+ mov al,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel qword 0xbbbbbbbb]
+ mov bl,[a64 rel qword 0xbbbbbbbb]
+ mov ax,[a64 rel qword 0xbbbbbbbb]
+ mov bx,[a64 rel qword 0xbbbbbbbb]
+ mov eax,[a64 rel qword 0xbbbbbbbb]
+ mov ebx,[a64 rel qword 0xbbbbbbbb]
+ mov rax,[a64 rel qword 0xbbbbbbbb]
+ mov rbx,[a64 rel qword 0xbbbbbbbb]
+ mov al,[a64 rel qword 0xffffffffcccccccc]
+ mov bl,[a64 rel qword 0xffffffffcccccccc]
+ mov ax,[a64 rel qword 0xffffffffcccccccc]
+ mov bx,[a64 rel qword 0xffffffffcccccccc]
+ mov eax,[a64 rel qword 0xffffffffcccccccc]
+ mov ebx,[a64 rel qword 0xffffffffcccccccc]
+ mov rax,[a64 rel qword 0xffffffffcccccccc]
+ mov rbx,[a64 rel qword 0xffffffffcccccccc]
+
+ mov al,[a32 rel foo]
+ mov bl,[a32 rel foo]
+ mov ax,[a32 rel foo]
+ mov bx,[a32 rel foo]
+ mov eax,[a32 rel foo]
+ mov ebx,[a32 rel foo]
+ mov rax,[a32 rel foo]
+ mov rbx,[a32 rel foo]
+ mov al,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel 0xbbbbbbbb]
+ mov bl,[a32 rel 0xbbbbbbbb]
+ mov ax,[a32 rel 0xbbbbbbbb]
+ mov bx,[a32 rel 0xbbbbbbbb]
+ mov eax,[a32 rel 0xbbbbbbbb]
+ mov ebx,[a32 rel 0xbbbbbbbb]
+ mov rax,[a32 rel 0xbbbbbbbb]
+ mov rbx,[a32 rel 0xbbbbbbbb]
+ mov al,[a32 rel 0xffffffffcccccccc]
+ mov bl,[a32 rel 0xffffffffcccccccc]
+ mov ax,[a32 rel 0xffffffffcccccccc]
+ mov bx,[a32 rel 0xffffffffcccccccc]
+ mov eax,[a32 rel 0xffffffffcccccccc]
+ mov ebx,[a32 rel 0xffffffffcccccccc]
+ mov rax,[a32 rel 0xffffffffcccccccc]
+ mov rbx,[a32 rel 0xffffffffcccccccc]
+
+ mov al,[a32 rel dword foo]
+ mov bl,[a32 rel dword foo]
+ mov ax,[a32 rel dword foo]
+ mov bx,[a32 rel dword foo]
+ mov eax,[a32 rel dword foo]
+ mov ebx,[a32 rel dword foo]
+ mov rax,[a32 rel dword foo]
+ mov rbx,[a32 rel dword foo]
+ mov al,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel dword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel dword 0xbbbbbbbb]
+ mov bl,[a32 rel dword 0xbbbbbbbb]
+ mov ax,[a32 rel dword 0xbbbbbbbb]
+ mov bx,[a32 rel dword 0xbbbbbbbb]
+ mov eax,[a32 rel dword 0xbbbbbbbb]
+ mov ebx,[a32 rel dword 0xbbbbbbbb]
+ mov rax,[a32 rel dword 0xbbbbbbbb]
+ mov rbx,[a32 rel dword 0xbbbbbbbb]
+ mov al,[a32 rel dword 0xffffffffcccccccc]
+ mov bl,[a32 rel dword 0xffffffffcccccccc]
+ mov ax,[a32 rel dword 0xffffffffcccccccc]
+ mov bx,[a32 rel dword 0xffffffffcccccccc]
+ mov eax,[a32 rel dword 0xffffffffcccccccc]
+ mov ebx,[a32 rel dword 0xffffffffcccccccc]
+ mov rax,[a32 rel dword 0xffffffffcccccccc]
+ mov rbx,[a32 rel dword 0xffffffffcccccccc]
+
+ mov al,[a32 rel qword foo]
+ mov bl,[a32 rel qword foo]
+ mov ax,[a32 rel qword foo]
+ mov bx,[a32 rel qword foo]
+ mov eax,[a32 rel qword foo]
+ mov ebx,[a32 rel qword foo]
+ mov rax,[a32 rel qword foo]
+ mov rbx,[a32 rel qword foo]
+ mov al,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel qword 0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel qword 0xbbbbbbbb]
+ mov bl,[a32 rel qword 0xbbbbbbbb]
+ mov ax,[a32 rel qword 0xbbbbbbbb]
+ mov bx,[a32 rel qword 0xbbbbbbbb]
+ mov eax,[a32 rel qword 0xbbbbbbbb]
+ mov ebx,[a32 rel qword 0xbbbbbbbb]
+ mov rax,[a32 rel qword 0xbbbbbbbb]
+ mov rbx,[a32 rel qword 0xbbbbbbbb]
+ mov al,[a32 rel qword 0xffffffffcccccccc]
+ mov bl,[a32 rel qword 0xffffffffcccccccc]
+ mov ax,[a32 rel qword 0xffffffffcccccccc]
+ mov bx,[a32 rel qword 0xffffffffcccccccc]
+ mov eax,[a32 rel qword 0xffffffffcccccccc]
+ mov ebx,[a32 rel qword 0xffffffffcccccccc]
+ mov rax,[a32 rel qword 0xffffffffcccccccc]
+ mov rbx,[a32 rel qword 0xffffffffcccccccc]
+
+ mov al,[fs:foo]
+ mov bl,[fs:foo]
+ mov ax,[fs:foo]
+ mov bx,[fs:foo]
+ mov eax,[fs:foo]
+ mov ebx,[fs:foo]
+ mov rax,[fs:foo]
+ mov rbx,[fs:foo]
+ mov al,[fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[fs:0xbbbbbbbb]
+ mov bl,[fs:0xbbbbbbbb]
+ mov ax,[fs:0xbbbbbbbb]
+ mov bx,[fs:0xbbbbbbbb]
+ mov eax,[fs:0xbbbbbbbb]
+ mov ebx,[fs:0xbbbbbbbb]
+ mov rax,[fs:0xbbbbbbbb]
+ mov rbx,[fs:0xbbbbbbbb]
+ mov al,[fs:0xffffffffcccccccc]
+ mov bl,[fs:0xffffffffcccccccc]
+ mov ax,[fs:0xffffffffcccccccc]
+ mov bx,[fs:0xffffffffcccccccc]
+ mov eax,[fs:0xffffffffcccccccc]
+ mov ebx,[fs:0xffffffffcccccccc]
+ mov rax,[fs:0xffffffffcccccccc]
+ mov rbx,[fs:0xffffffffcccccccc]
+
+ mov al,[dword fs:foo]
+ mov bl,[dword fs:foo]
+ mov ax,[dword fs:foo]
+ mov bx,[dword fs:foo]
+ mov eax,[dword fs:foo]
+ mov ebx,[dword fs:foo]
+ mov rax,[dword fs:foo]
+ mov rbx,[dword fs:foo]
+ mov al,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[dword fs:0xbbbbbbbb]
+ mov bl,[dword fs:0xbbbbbbbb]
+ mov ax,[dword fs:0xbbbbbbbb]
+ mov bx,[dword fs:0xbbbbbbbb]
+ mov eax,[dword fs:0xbbbbbbbb]
+ mov ebx,[dword fs:0xbbbbbbbb]
+ mov rax,[dword fs:0xbbbbbbbb]
+ mov rbx,[dword fs:0xbbbbbbbb]
+ mov al,[dword fs:0xffffffffcccccccc]
+ mov bl,[dword fs:0xffffffffcccccccc]
+ mov ax,[dword fs:0xffffffffcccccccc]
+ mov bx,[dword fs:0xffffffffcccccccc]
+ mov eax,[dword fs:0xffffffffcccccccc]
+ mov ebx,[dword fs:0xffffffffcccccccc]
+ mov rax,[dword fs:0xffffffffcccccccc]
+ mov rbx,[dword fs:0xffffffffcccccccc]
+
+ mov al,[qword fs:foo]
+ mov bl,[qword fs:foo]
+ mov ax,[qword fs:foo]
+ mov bx,[qword fs:foo]
+ mov eax,[qword fs:foo]
+ mov ebx,[qword fs:foo]
+ mov rax,[qword fs:foo]
+ mov rbx,[qword fs:foo]
+ mov al,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[qword fs:0xbbbbbbbb]
+ mov bl,[qword fs:0xbbbbbbbb]
+ mov ax,[qword fs:0xbbbbbbbb]
+ mov bx,[qword fs:0xbbbbbbbb]
+ mov eax,[qword fs:0xbbbbbbbb]
+ mov ebx,[qword fs:0xbbbbbbbb]
+ mov rax,[qword fs:0xbbbbbbbb]
+ mov rbx,[qword fs:0xbbbbbbbb]
+ mov al,[qword fs:0xffffffffcccccccc]
+ mov bl,[qword fs:0xffffffffcccccccc]
+ mov ax,[qword fs:0xffffffffcccccccc]
+ mov bx,[qword fs:0xffffffffcccccccc]
+ mov eax,[qword fs:0xffffffffcccccccc]
+ mov ebx,[qword fs:0xffffffffcccccccc]
+ mov rax,[qword fs:0xffffffffcccccccc]
+ mov rbx,[qword fs:0xffffffffcccccccc]
+
+ mov al,[a64 fs:foo]
+ mov bl,[a64 fs:foo]
+ mov ax,[a64 fs:foo]
+ mov bx,[a64 fs:foo]
+ mov eax,[a64 fs:foo]
+ mov ebx,[a64 fs:foo]
+ mov rax,[a64 fs:foo]
+ mov rbx,[a64 fs:foo]
+ mov al,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 fs:0xbbbbbbbb]
+ mov bl,[a64 fs:0xbbbbbbbb]
+ mov ax,[a64 fs:0xbbbbbbbb]
+ mov bx,[a64 fs:0xbbbbbbbb]
+ mov eax,[a64 fs:0xbbbbbbbb]
+ mov ebx,[a64 fs:0xbbbbbbbb]
+ mov rax,[a64 fs:0xbbbbbbbb]
+ mov rbx,[a64 fs:0xbbbbbbbb]
+ mov al,[a64 fs:0xffffffffcccccccc]
+ mov bl,[a64 fs:0xffffffffcccccccc]
+ mov ax,[a64 fs:0xffffffffcccccccc]
+ mov bx,[a64 fs:0xffffffffcccccccc]
+ mov eax,[a64 fs:0xffffffffcccccccc]
+ mov ebx,[a64 fs:0xffffffffcccccccc]
+ mov rax,[a64 fs:0xffffffffcccccccc]
+ mov rbx,[a64 fs:0xffffffffcccccccc]
+
+ mov al,[a64 dword fs:foo]
+ mov bl,[a64 dword fs:foo]
+ mov ax,[a64 dword fs:foo]
+ mov bx,[a64 dword fs:foo]
+ mov eax,[a64 dword fs:foo]
+ mov ebx,[a64 dword fs:foo]
+ mov rax,[a64 dword fs:foo]
+ mov rbx,[a64 dword fs:foo]
+ mov al,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 dword fs:0xbbbbbbbb]
+ mov bl,[a64 dword fs:0xbbbbbbbb]
+ mov ax,[a64 dword fs:0xbbbbbbbb]
+ mov bx,[a64 dword fs:0xbbbbbbbb]
+ mov eax,[a64 dword fs:0xbbbbbbbb]
+ mov ebx,[a64 dword fs:0xbbbbbbbb]
+ mov rax,[a64 dword fs:0xbbbbbbbb]
+ mov rbx,[a64 dword fs:0xbbbbbbbb]
+ mov al,[a64 dword fs:0xffffffffcccccccc]
+ mov bl,[a64 dword fs:0xffffffffcccccccc]
+ mov ax,[a64 dword fs:0xffffffffcccccccc]
+ mov bx,[a64 dword fs:0xffffffffcccccccc]
+ mov eax,[a64 dword fs:0xffffffffcccccccc]
+ mov ebx,[a64 dword fs:0xffffffffcccccccc]
+ mov rax,[a64 dword fs:0xffffffffcccccccc]
+ mov rbx,[a64 dword fs:0xffffffffcccccccc]
+
+ mov al,[a64 qword fs:foo]
+ mov bl,[a64 qword fs:foo]
+ mov ax,[a64 qword fs:foo]
+ mov bx,[a64 qword fs:foo]
+ mov eax,[a64 qword fs:foo]
+ mov ebx,[a64 qword fs:foo]
+ mov rax,[a64 qword fs:foo]
+ mov rbx,[a64 qword fs:foo]
+ mov al,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 qword fs:0xbbbbbbbb]
+ mov bl,[a64 qword fs:0xbbbbbbbb]
+ mov ax,[a64 qword fs:0xbbbbbbbb]
+ mov bx,[a64 qword fs:0xbbbbbbbb]
+ mov eax,[a64 qword fs:0xbbbbbbbb]
+ mov ebx,[a64 qword fs:0xbbbbbbbb]
+ mov rax,[a64 qword fs:0xbbbbbbbb]
+ mov rbx,[a64 qword fs:0xbbbbbbbb]
+ mov al,[a64 qword fs:0xffffffffcccccccc]
+ mov bl,[a64 qword fs:0xffffffffcccccccc]
+ mov ax,[a64 qword fs:0xffffffffcccccccc]
+ mov bx,[a64 qword fs:0xffffffffcccccccc]
+ mov eax,[a64 qword fs:0xffffffffcccccccc]
+ mov ebx,[a64 qword fs:0xffffffffcccccccc]
+ mov rax,[a64 qword fs:0xffffffffcccccccc]
+ mov rbx,[a64 qword fs:0xffffffffcccccccc]
+
+ mov al,[a32 fs:foo]
+ mov bl,[a32 fs:foo]
+ mov ax,[a32 fs:foo]
+ mov bx,[a32 fs:foo]
+ mov eax,[a32 fs:foo]
+ mov ebx,[a32 fs:foo]
+ mov rax,[a32 fs:foo]
+ mov rbx,[a32 fs:foo]
+ mov al,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 fs:0xbbbbbbbb]
+ mov bl,[a32 fs:0xbbbbbbbb]
+ mov ax,[a32 fs:0xbbbbbbbb]
+ mov bx,[a32 fs:0xbbbbbbbb]
+ mov eax,[a32 fs:0xbbbbbbbb]
+ mov ebx,[a32 fs:0xbbbbbbbb]
+ mov rax,[a32 fs:0xbbbbbbbb]
+ mov rbx,[a32 fs:0xbbbbbbbb]
+ mov al,[a32 fs:0xffffffffcccccccc]
+ mov bl,[a32 fs:0xffffffffcccccccc]
+ mov ax,[a32 fs:0xffffffffcccccccc]
+ mov bx,[a32 fs:0xffffffffcccccccc]
+ mov eax,[a32 fs:0xffffffffcccccccc]
+ mov ebx,[a32 fs:0xffffffffcccccccc]
+ mov rax,[a32 fs:0xffffffffcccccccc]
+ mov rbx,[a32 fs:0xffffffffcccccccc]
+
+ mov al,[a32 dword fs:foo]
+ mov bl,[a32 dword fs:foo]
+ mov ax,[a32 dword fs:foo]
+ mov bx,[a32 dword fs:foo]
+ mov eax,[a32 dword fs:foo]
+ mov ebx,[a32 dword fs:foo]
+ mov rax,[a32 dword fs:foo]
+ mov rbx,[a32 dword fs:foo]
+ mov al,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 dword fs:0xbbbbbbbb]
+ mov bl,[a32 dword fs:0xbbbbbbbb]
+ mov ax,[a32 dword fs:0xbbbbbbbb]
+ mov bx,[a32 dword fs:0xbbbbbbbb]
+ mov eax,[a32 dword fs:0xbbbbbbbb]
+ mov ebx,[a32 dword fs:0xbbbbbbbb]
+ mov rax,[a32 dword fs:0xbbbbbbbb]
+ mov rbx,[a32 dword fs:0xbbbbbbbb]
+ mov al,[a32 dword fs:0xffffffffcccccccc]
+ mov bl,[a32 dword fs:0xffffffffcccccccc]
+ mov ax,[a32 dword fs:0xffffffffcccccccc]
+ mov bx,[a32 dword fs:0xffffffffcccccccc]
+ mov eax,[a32 dword fs:0xffffffffcccccccc]
+ mov ebx,[a32 dword fs:0xffffffffcccccccc]
+ mov rax,[a32 dword fs:0xffffffffcccccccc]
+ mov rbx,[a32 dword fs:0xffffffffcccccccc]
+
+ mov al,[a32 qword fs:foo]
+ mov bl,[a32 qword fs:foo]
+ mov ax,[a32 qword fs:foo]
+ mov bx,[a32 qword fs:foo]
+ mov eax,[a32 qword fs:foo]
+ mov ebx,[a32 qword fs:foo]
+ mov rax,[a32 qword fs:foo]
+ mov rbx,[a32 qword fs:foo]
+ mov al,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 qword fs:0xbbbbbbbb]
+ mov bl,[a32 qword fs:0xbbbbbbbb]
+ mov ax,[a32 qword fs:0xbbbbbbbb]
+ mov bx,[a32 qword fs:0xbbbbbbbb]
+ mov eax,[a32 qword fs:0xbbbbbbbb]
+ mov ebx,[a32 qword fs:0xbbbbbbbb]
+ mov rax,[a32 qword fs:0xbbbbbbbb]
+ mov rbx,[a32 qword fs:0xbbbbbbbb]
+ mov al,[a32 qword fs:0xffffffffcccccccc]
+ mov bl,[a32 qword fs:0xffffffffcccccccc]
+ mov ax,[a32 qword fs:0xffffffffcccccccc]
+ mov bx,[a32 qword fs:0xffffffffcccccccc]
+ mov eax,[a32 qword fs:0xffffffffcccccccc]
+ mov ebx,[a32 qword fs:0xffffffffcccccccc]
+ mov rax,[a32 qword fs:0xffffffffcccccccc]
+ mov rbx,[a32 qword fs:0xffffffffcccccccc]
+
+ mov al,[abs fs:foo]
+ mov bl,[abs fs:foo]
+ mov ax,[abs fs:foo]
+ mov bx,[abs fs:foo]
+ mov eax,[abs fs:foo]
+ mov ebx,[abs fs:foo]
+ mov rax,[abs fs:foo]
+ mov rbx,[abs fs:foo]
+ mov al,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs fs:0xbbbbbbbb]
+ mov bl,[abs fs:0xbbbbbbbb]
+ mov ax,[abs fs:0xbbbbbbbb]
+ mov bx,[abs fs:0xbbbbbbbb]
+ mov eax,[abs fs:0xbbbbbbbb]
+ mov ebx,[abs fs:0xbbbbbbbb]
+ mov rax,[abs fs:0xbbbbbbbb]
+ mov rbx,[abs fs:0xbbbbbbbb]
+ mov al,[abs fs:0xffffffffcccccccc]
+ mov bl,[abs fs:0xffffffffcccccccc]
+ mov ax,[abs fs:0xffffffffcccccccc]
+ mov bx,[abs fs:0xffffffffcccccccc]
+ mov eax,[abs fs:0xffffffffcccccccc]
+ mov ebx,[abs fs:0xffffffffcccccccc]
+ mov rax,[abs fs:0xffffffffcccccccc]
+ mov rbx,[abs fs:0xffffffffcccccccc]
+
+ mov al,[abs dword fs:foo]
+ mov bl,[abs dword fs:foo]
+ mov ax,[abs dword fs:foo]
+ mov bx,[abs dword fs:foo]
+ mov eax,[abs dword fs:foo]
+ mov ebx,[abs dword fs:foo]
+ mov rax,[abs dword fs:foo]
+ mov rbx,[abs dword fs:foo]
+ mov al,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs dword fs:0xbbbbbbbb]
+ mov bl,[abs dword fs:0xbbbbbbbb]
+ mov ax,[abs dword fs:0xbbbbbbbb]
+ mov bx,[abs dword fs:0xbbbbbbbb]
+ mov eax,[abs dword fs:0xbbbbbbbb]
+ mov ebx,[abs dword fs:0xbbbbbbbb]
+ mov rax,[abs dword fs:0xbbbbbbbb]
+ mov rbx,[abs dword fs:0xbbbbbbbb]
+ mov al,[abs dword fs:0xffffffffcccccccc]
+ mov bl,[abs dword fs:0xffffffffcccccccc]
+ mov ax,[abs dword fs:0xffffffffcccccccc]
+ mov bx,[abs dword fs:0xffffffffcccccccc]
+ mov eax,[abs dword fs:0xffffffffcccccccc]
+ mov ebx,[abs dword fs:0xffffffffcccccccc]
+ mov rax,[abs dword fs:0xffffffffcccccccc]
+ mov rbx,[abs dword fs:0xffffffffcccccccc]
+
+ mov al,[abs qword fs:foo]
+ mov bl,[abs qword fs:foo]
+ mov ax,[abs qword fs:foo]
+ mov bx,[abs qword fs:foo]
+ mov eax,[abs qword fs:foo]
+ mov ebx,[abs qword fs:foo]
+ mov rax,[abs qword fs:foo]
+ mov rbx,[abs qword fs:foo]
+ mov al,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs qword fs:0xbbbbbbbb]
+ mov bl,[abs qword fs:0xbbbbbbbb]
+ mov ax,[abs qword fs:0xbbbbbbbb]
+ mov bx,[abs qword fs:0xbbbbbbbb]
+ mov eax,[abs qword fs:0xbbbbbbbb]
+ mov ebx,[abs qword fs:0xbbbbbbbb]
+ mov rax,[abs qword fs:0xbbbbbbbb]
+ mov rbx,[abs qword fs:0xbbbbbbbb]
+ mov al,[abs qword fs:0xffffffffcccccccc]
+ mov bl,[abs qword fs:0xffffffffcccccccc]
+ mov ax,[abs qword fs:0xffffffffcccccccc]
+ mov bx,[abs qword fs:0xffffffffcccccccc]
+ mov eax,[abs qword fs:0xffffffffcccccccc]
+ mov ebx,[abs qword fs:0xffffffffcccccccc]
+ mov rax,[abs qword fs:0xffffffffcccccccc]
+ mov rbx,[abs qword fs:0xffffffffcccccccc]
+
+ mov al,[a64 abs fs:foo]
+ mov bl,[a64 abs fs:foo]
+ mov ax,[a64 abs fs:foo]
+ mov bx,[a64 abs fs:foo]
+ mov eax,[a64 abs fs:foo]
+ mov ebx,[a64 abs fs:foo]
+ mov rax,[a64 abs fs:foo]
+ mov rbx,[a64 abs fs:foo]
+ mov al,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs fs:0xbbbbbbbb]
+ mov bl,[a64 abs fs:0xbbbbbbbb]
+ mov ax,[a64 abs fs:0xbbbbbbbb]
+ mov bx,[a64 abs fs:0xbbbbbbbb]
+ mov eax,[a64 abs fs:0xbbbbbbbb]
+ mov ebx,[a64 abs fs:0xbbbbbbbb]
+ mov rax,[a64 abs fs:0xbbbbbbbb]
+ mov rbx,[a64 abs fs:0xbbbbbbbb]
+ mov al,[a64 abs fs:0xffffffffcccccccc]
+ mov bl,[a64 abs fs:0xffffffffcccccccc]
+ mov ax,[a64 abs fs:0xffffffffcccccccc]
+ mov bx,[a64 abs fs:0xffffffffcccccccc]
+ mov eax,[a64 abs fs:0xffffffffcccccccc]
+ mov ebx,[a64 abs fs:0xffffffffcccccccc]
+ mov rax,[a64 abs fs:0xffffffffcccccccc]
+ mov rbx,[a64 abs fs:0xffffffffcccccccc]
+
+ mov al,[a64 abs dword fs:foo]
+ mov bl,[a64 abs dword fs:foo]
+ mov ax,[a64 abs dword fs:foo]
+ mov bx,[a64 abs dword fs:foo]
+ mov eax,[a64 abs dword fs:foo]
+ mov ebx,[a64 abs dword fs:foo]
+ mov rax,[a64 abs dword fs:foo]
+ mov rbx,[a64 abs dword fs:foo]
+ mov al,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs dword fs:0xbbbbbbbb]
+ mov bl,[a64 abs dword fs:0xbbbbbbbb]
+ mov ax,[a64 abs dword fs:0xbbbbbbbb]
+ mov bx,[a64 abs dword fs:0xbbbbbbbb]
+ mov eax,[a64 abs dword fs:0xbbbbbbbb]
+ mov ebx,[a64 abs dword fs:0xbbbbbbbb]
+ mov rax,[a64 abs dword fs:0xbbbbbbbb]
+ mov rbx,[a64 abs dword fs:0xbbbbbbbb]
+ mov al,[a64 abs dword fs:0xffffffffcccccccc]
+ mov bl,[a64 abs dword fs:0xffffffffcccccccc]
+ mov ax,[a64 abs dword fs:0xffffffffcccccccc]
+ mov bx,[a64 abs dword fs:0xffffffffcccccccc]
+ mov eax,[a64 abs dword fs:0xffffffffcccccccc]
+ mov ebx,[a64 abs dword fs:0xffffffffcccccccc]
+ mov rax,[a64 abs dword fs:0xffffffffcccccccc]
+ mov rbx,[a64 abs dword fs:0xffffffffcccccccc]
+
+ mov al,[a64 abs qword fs:foo]
+ mov bl,[a64 abs qword fs:foo]
+ mov ax,[a64 abs qword fs:foo]
+ mov bx,[a64 abs qword fs:foo]
+ mov eax,[a64 abs qword fs:foo]
+ mov ebx,[a64 abs qword fs:foo]
+ mov rax,[a64 abs qword fs:foo]
+ mov rbx,[a64 abs qword fs:foo]
+ mov al,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs qword fs:0xbbbbbbbb]
+ mov bl,[a64 abs qword fs:0xbbbbbbbb]
+ mov ax,[a64 abs qword fs:0xbbbbbbbb]
+ mov bx,[a64 abs qword fs:0xbbbbbbbb]
+ mov eax,[a64 abs qword fs:0xbbbbbbbb]
+ mov ebx,[a64 abs qword fs:0xbbbbbbbb]
+ mov rax,[a64 abs qword fs:0xbbbbbbbb]
+ mov rbx,[a64 abs qword fs:0xbbbbbbbb]
+ mov al,[a64 abs qword fs:0xffffffffcccccccc]
+ mov bl,[a64 abs qword fs:0xffffffffcccccccc]
+ mov ax,[a64 abs qword fs:0xffffffffcccccccc]
+ mov bx,[a64 abs qword fs:0xffffffffcccccccc]
+ mov eax,[a64 abs qword fs:0xffffffffcccccccc]
+ mov ebx,[a64 abs qword fs:0xffffffffcccccccc]
+ mov rax,[a64 abs qword fs:0xffffffffcccccccc]
+ mov rbx,[a64 abs qword fs:0xffffffffcccccccc]
+
+ mov al,[a32 abs fs:foo]
+ mov bl,[a32 abs fs:foo]
+ mov ax,[a32 abs fs:foo]
+ mov bx,[a32 abs fs:foo]
+ mov eax,[a32 abs fs:foo]
+ mov ebx,[a32 abs fs:foo]
+ mov rax,[a32 abs fs:foo]
+ mov rbx,[a32 abs fs:foo]
+ mov al,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs fs:0xbbbbbbbb]
+ mov bl,[a32 abs fs:0xbbbbbbbb]
+ mov ax,[a32 abs fs:0xbbbbbbbb]
+ mov bx,[a32 abs fs:0xbbbbbbbb]
+ mov eax,[a32 abs fs:0xbbbbbbbb]
+ mov ebx,[a32 abs fs:0xbbbbbbbb]
+ mov rax,[a32 abs fs:0xbbbbbbbb]
+ mov rbx,[a32 abs fs:0xbbbbbbbb]
+ mov al,[a32 abs fs:0xffffffffcccccccc]
+ mov bl,[a32 abs fs:0xffffffffcccccccc]
+ mov ax,[a32 abs fs:0xffffffffcccccccc]
+ mov bx,[a32 abs fs:0xffffffffcccccccc]
+ mov eax,[a32 abs fs:0xffffffffcccccccc]
+ mov ebx,[a32 abs fs:0xffffffffcccccccc]
+ mov rax,[a32 abs fs:0xffffffffcccccccc]
+ mov rbx,[a32 abs fs:0xffffffffcccccccc]
+
+ mov al,[a32 abs dword fs:foo]
+ mov bl,[a32 abs dword fs:foo]
+ mov ax,[a32 abs dword fs:foo]
+ mov bx,[a32 abs dword fs:foo]
+ mov eax,[a32 abs dword fs:foo]
+ mov ebx,[a32 abs dword fs:foo]
+ mov rax,[a32 abs dword fs:foo]
+ mov rbx,[a32 abs dword fs:foo]
+ mov al,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs dword fs:0xbbbbbbbb]
+ mov bl,[a32 abs dword fs:0xbbbbbbbb]
+ mov ax,[a32 abs dword fs:0xbbbbbbbb]
+ mov bx,[a32 abs dword fs:0xbbbbbbbb]
+ mov eax,[a32 abs dword fs:0xbbbbbbbb]
+ mov ebx,[a32 abs dword fs:0xbbbbbbbb]
+ mov rax,[a32 abs dword fs:0xbbbbbbbb]
+ mov rbx,[a32 abs dword fs:0xbbbbbbbb]
+ mov al,[a32 abs dword fs:0xffffffffcccccccc]
+ mov bl,[a32 abs dword fs:0xffffffffcccccccc]
+ mov ax,[a32 abs dword fs:0xffffffffcccccccc]
+ mov bx,[a32 abs dword fs:0xffffffffcccccccc]
+ mov eax,[a32 abs dword fs:0xffffffffcccccccc]
+ mov ebx,[a32 abs dword fs:0xffffffffcccccccc]
+ mov rax,[a32 abs dword fs:0xffffffffcccccccc]
+ mov rbx,[a32 abs dword fs:0xffffffffcccccccc]
+
+ mov al,[a32 abs qword fs:foo]
+ mov bl,[a32 abs qword fs:foo]
+ mov ax,[a32 abs qword fs:foo]
+ mov bx,[a32 abs qword fs:foo]
+ mov eax,[a32 abs qword fs:foo]
+ mov ebx,[a32 abs qword fs:foo]
+ mov rax,[a32 abs qword fs:foo]
+ mov rbx,[a32 abs qword fs:foo]
+ mov al,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs qword fs:0xbbbbbbbb]
+ mov bl,[a32 abs qword fs:0xbbbbbbbb]
+ mov ax,[a32 abs qword fs:0xbbbbbbbb]
+ mov bx,[a32 abs qword fs:0xbbbbbbbb]
+ mov eax,[a32 abs qword fs:0xbbbbbbbb]
+ mov ebx,[a32 abs qword fs:0xbbbbbbbb]
+ mov rax,[a32 abs qword fs:0xbbbbbbbb]
+ mov rbx,[a32 abs qword fs:0xbbbbbbbb]
+ mov al,[a32 abs qword fs:0xffffffffcccccccc]
+ mov bl,[a32 abs qword fs:0xffffffffcccccccc]
+ mov ax,[a32 abs qword fs:0xffffffffcccccccc]
+ mov bx,[a32 abs qword fs:0xffffffffcccccccc]
+ mov eax,[a32 abs qword fs:0xffffffffcccccccc]
+ mov ebx,[a32 abs qword fs:0xffffffffcccccccc]
+ mov rax,[a32 abs qword fs:0xffffffffcccccccc]
+ mov rbx,[a32 abs qword fs:0xffffffffcccccccc]
+
+ mov al,[rel fs:foo]
+ mov bl,[rel fs:foo]
+ mov ax,[rel fs:foo]
+ mov bx,[rel fs:foo]
+ mov eax,[rel fs:foo]
+ mov ebx,[rel fs:foo]
+ mov rax,[rel fs:foo]
+ mov rbx,[rel fs:foo]
+ mov al,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel fs:0xbbbbbbbb]
+ mov bl,[rel fs:0xbbbbbbbb]
+ mov ax,[rel fs:0xbbbbbbbb]
+ mov bx,[rel fs:0xbbbbbbbb]
+ mov eax,[rel fs:0xbbbbbbbb]
+ mov ebx,[rel fs:0xbbbbbbbb]
+ mov rax,[rel fs:0xbbbbbbbb]
+ mov rbx,[rel fs:0xbbbbbbbb]
+ mov al,[rel fs:0xffffffffcccccccc]
+ mov bl,[rel fs:0xffffffffcccccccc]
+ mov ax,[rel fs:0xffffffffcccccccc]
+ mov bx,[rel fs:0xffffffffcccccccc]
+ mov eax,[rel fs:0xffffffffcccccccc]
+ mov ebx,[rel fs:0xffffffffcccccccc]
+ mov rax,[rel fs:0xffffffffcccccccc]
+ mov rbx,[rel fs:0xffffffffcccccccc]
+
+ mov al,[rel dword fs:foo]
+ mov bl,[rel dword fs:foo]
+ mov ax,[rel dword fs:foo]
+ mov bx,[rel dword fs:foo]
+ mov eax,[rel dword fs:foo]
+ mov ebx,[rel dword fs:foo]
+ mov rax,[rel dword fs:foo]
+ mov rbx,[rel dword fs:foo]
+ mov al,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel dword fs:0xbbbbbbbb]
+ mov bl,[rel dword fs:0xbbbbbbbb]
+ mov ax,[rel dword fs:0xbbbbbbbb]
+ mov bx,[rel dword fs:0xbbbbbbbb]
+ mov eax,[rel dword fs:0xbbbbbbbb]
+ mov ebx,[rel dword fs:0xbbbbbbbb]
+ mov rax,[rel dword fs:0xbbbbbbbb]
+ mov rbx,[rel dword fs:0xbbbbbbbb]
+ mov al,[rel dword fs:0xffffffffcccccccc]
+ mov bl,[rel dword fs:0xffffffffcccccccc]
+ mov ax,[rel dword fs:0xffffffffcccccccc]
+ mov bx,[rel dword fs:0xffffffffcccccccc]
+ mov eax,[rel dword fs:0xffffffffcccccccc]
+ mov ebx,[rel dword fs:0xffffffffcccccccc]
+ mov rax,[rel dword fs:0xffffffffcccccccc]
+ mov rbx,[rel dword fs:0xffffffffcccccccc]
+
+ mov al,[rel qword fs:foo]
+ mov bl,[rel qword fs:foo]
+ mov ax,[rel qword fs:foo]
+ mov bx,[rel qword fs:foo]
+ mov eax,[rel qword fs:foo]
+ mov ebx,[rel qword fs:foo]
+ mov rax,[rel qword fs:foo]
+ mov rbx,[rel qword fs:foo]
+ mov al,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel qword fs:0xbbbbbbbb]
+ mov bl,[rel qword fs:0xbbbbbbbb]
+ mov ax,[rel qword fs:0xbbbbbbbb]
+ mov bx,[rel qword fs:0xbbbbbbbb]
+ mov eax,[rel qword fs:0xbbbbbbbb]
+ mov ebx,[rel qword fs:0xbbbbbbbb]
+ mov rax,[rel qword fs:0xbbbbbbbb]
+ mov rbx,[rel qword fs:0xbbbbbbbb]
+ mov al,[rel qword fs:0xffffffffcccccccc]
+ mov bl,[rel qword fs:0xffffffffcccccccc]
+ mov ax,[rel qword fs:0xffffffffcccccccc]
+ mov bx,[rel qword fs:0xffffffffcccccccc]
+ mov eax,[rel qword fs:0xffffffffcccccccc]
+ mov ebx,[rel qword fs:0xffffffffcccccccc]
+ mov rax,[rel qword fs:0xffffffffcccccccc]
+ mov rbx,[rel qword fs:0xffffffffcccccccc]
+
+ mov al,[a64 rel fs:foo]
+ mov bl,[a64 rel fs:foo]
+ mov ax,[a64 rel fs:foo]
+ mov bx,[a64 rel fs:foo]
+ mov eax,[a64 rel fs:foo]
+ mov ebx,[a64 rel fs:foo]
+ mov rax,[a64 rel fs:foo]
+ mov rbx,[a64 rel fs:foo]
+ mov al,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel fs:0xbbbbbbbb]
+ mov bl,[a64 rel fs:0xbbbbbbbb]
+ mov ax,[a64 rel fs:0xbbbbbbbb]
+ mov bx,[a64 rel fs:0xbbbbbbbb]
+ mov eax,[a64 rel fs:0xbbbbbbbb]
+ mov ebx,[a64 rel fs:0xbbbbbbbb]
+ mov rax,[a64 rel fs:0xbbbbbbbb]
+ mov rbx,[a64 rel fs:0xbbbbbbbb]
+ mov al,[a64 rel fs:0xffffffffcccccccc]
+ mov bl,[a64 rel fs:0xffffffffcccccccc]
+ mov ax,[a64 rel fs:0xffffffffcccccccc]
+ mov bx,[a64 rel fs:0xffffffffcccccccc]
+ mov eax,[a64 rel fs:0xffffffffcccccccc]
+ mov ebx,[a64 rel fs:0xffffffffcccccccc]
+ mov rax,[a64 rel fs:0xffffffffcccccccc]
+ mov rbx,[a64 rel fs:0xffffffffcccccccc]
+
+ mov al,[a64 rel dword fs:foo]
+ mov bl,[a64 rel dword fs:foo]
+ mov ax,[a64 rel dword fs:foo]
+ mov bx,[a64 rel dword fs:foo]
+ mov eax,[a64 rel dword fs:foo]
+ mov ebx,[a64 rel dword fs:foo]
+ mov rax,[a64 rel dword fs:foo]
+ mov rbx,[a64 rel dword fs:foo]
+ mov al,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel dword fs:0xbbbbbbbb]
+ mov bl,[a64 rel dword fs:0xbbbbbbbb]
+ mov ax,[a64 rel dword fs:0xbbbbbbbb]
+ mov bx,[a64 rel dword fs:0xbbbbbbbb]
+ mov eax,[a64 rel dword fs:0xbbbbbbbb]
+ mov ebx,[a64 rel dword fs:0xbbbbbbbb]
+ mov rax,[a64 rel dword fs:0xbbbbbbbb]
+ mov rbx,[a64 rel dword fs:0xbbbbbbbb]
+ mov al,[a64 rel dword fs:0xffffffffcccccccc]
+ mov bl,[a64 rel dword fs:0xffffffffcccccccc]
+ mov ax,[a64 rel dword fs:0xffffffffcccccccc]
+ mov bx,[a64 rel dword fs:0xffffffffcccccccc]
+ mov eax,[a64 rel dword fs:0xffffffffcccccccc]
+ mov ebx,[a64 rel dword fs:0xffffffffcccccccc]
+ mov rax,[a64 rel dword fs:0xffffffffcccccccc]
+ mov rbx,[a64 rel dword fs:0xffffffffcccccccc]
+
+ mov al,[a64 rel qword fs:foo]
+ mov bl,[a64 rel qword fs:foo]
+ mov ax,[a64 rel qword fs:foo]
+ mov bx,[a64 rel qword fs:foo]
+ mov eax,[a64 rel qword fs:foo]
+ mov ebx,[a64 rel qword fs:foo]
+ mov rax,[a64 rel qword fs:foo]
+ mov rbx,[a64 rel qword fs:foo]
+ mov al,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel qword fs:0xbbbbbbbb]
+ mov bl,[a64 rel qword fs:0xbbbbbbbb]
+ mov ax,[a64 rel qword fs:0xbbbbbbbb]
+ mov bx,[a64 rel qword fs:0xbbbbbbbb]
+ mov eax,[a64 rel qword fs:0xbbbbbbbb]
+ mov ebx,[a64 rel qword fs:0xbbbbbbbb]
+ mov rax,[a64 rel qword fs:0xbbbbbbbb]
+ mov rbx,[a64 rel qword fs:0xbbbbbbbb]
+ mov al,[a64 rel qword fs:0xffffffffcccccccc]
+ mov bl,[a64 rel qword fs:0xffffffffcccccccc]
+ mov ax,[a64 rel qword fs:0xffffffffcccccccc]
+ mov bx,[a64 rel qword fs:0xffffffffcccccccc]
+ mov eax,[a64 rel qword fs:0xffffffffcccccccc]
+ mov ebx,[a64 rel qword fs:0xffffffffcccccccc]
+ mov rax,[a64 rel qword fs:0xffffffffcccccccc]
+ mov rbx,[a64 rel qword fs:0xffffffffcccccccc]
+
+ mov al,[a32 rel fs:foo]
+ mov bl,[a32 rel fs:foo]
+ mov ax,[a32 rel fs:foo]
+ mov bx,[a32 rel fs:foo]
+ mov eax,[a32 rel fs:foo]
+ mov ebx,[a32 rel fs:foo]
+ mov rax,[a32 rel fs:foo]
+ mov rbx,[a32 rel fs:foo]
+ mov al,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel fs:0xbbbbbbbb]
+ mov bl,[a32 rel fs:0xbbbbbbbb]
+ mov ax,[a32 rel fs:0xbbbbbbbb]
+ mov bx,[a32 rel fs:0xbbbbbbbb]
+ mov eax,[a32 rel fs:0xbbbbbbbb]
+ mov ebx,[a32 rel fs:0xbbbbbbbb]
+ mov rax,[a32 rel fs:0xbbbbbbbb]
+ mov rbx,[a32 rel fs:0xbbbbbbbb]
+ mov al,[a32 rel fs:0xffffffffcccccccc]
+ mov bl,[a32 rel fs:0xffffffffcccccccc]
+ mov ax,[a32 rel fs:0xffffffffcccccccc]
+ mov bx,[a32 rel fs:0xffffffffcccccccc]
+ mov eax,[a32 rel fs:0xffffffffcccccccc]
+ mov ebx,[a32 rel fs:0xffffffffcccccccc]
+ mov rax,[a32 rel fs:0xffffffffcccccccc]
+ mov rbx,[a32 rel fs:0xffffffffcccccccc]
+
+ mov al,[a32 rel dword fs:foo]
+ mov bl,[a32 rel dword fs:foo]
+ mov ax,[a32 rel dword fs:foo]
+ mov bx,[a32 rel dword fs:foo]
+ mov eax,[a32 rel dword fs:foo]
+ mov ebx,[a32 rel dword fs:foo]
+ mov rax,[a32 rel dword fs:foo]
+ mov rbx,[a32 rel dword fs:foo]
+ mov al,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel dword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel dword fs:0xbbbbbbbb]
+ mov bl,[a32 rel dword fs:0xbbbbbbbb]
+ mov ax,[a32 rel dword fs:0xbbbbbbbb]
+ mov bx,[a32 rel dword fs:0xbbbbbbbb]
+ mov eax,[a32 rel dword fs:0xbbbbbbbb]
+ mov ebx,[a32 rel dword fs:0xbbbbbbbb]
+ mov rax,[a32 rel dword fs:0xbbbbbbbb]
+ mov rbx,[a32 rel dword fs:0xbbbbbbbb]
+ mov al,[a32 rel dword fs:0xffffffffcccccccc]
+ mov bl,[a32 rel dword fs:0xffffffffcccccccc]
+ mov ax,[a32 rel dword fs:0xffffffffcccccccc]
+ mov bx,[a32 rel dword fs:0xffffffffcccccccc]
+ mov eax,[a32 rel dword fs:0xffffffffcccccccc]
+ mov ebx,[a32 rel dword fs:0xffffffffcccccccc]
+ mov rax,[a32 rel dword fs:0xffffffffcccccccc]
+ mov rbx,[a32 rel dword fs:0xffffffffcccccccc]
+
+ mov al,[a32 rel qword fs:foo]
+ mov bl,[a32 rel qword fs:foo]
+ mov ax,[a32 rel qword fs:foo]
+ mov bx,[a32 rel qword fs:foo]
+ mov eax,[a32 rel qword fs:foo]
+ mov ebx,[a32 rel qword fs:foo]
+ mov rax,[a32 rel qword fs:foo]
+ mov rbx,[a32 rel qword fs:foo]
+ mov al,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel qword fs:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel qword fs:0xbbbbbbbb]
+ mov bl,[a32 rel qword fs:0xbbbbbbbb]
+ mov ax,[a32 rel qword fs:0xbbbbbbbb]
+ mov bx,[a32 rel qword fs:0xbbbbbbbb]
+ mov eax,[a32 rel qword fs:0xbbbbbbbb]
+ mov ebx,[a32 rel qword fs:0xbbbbbbbb]
+ mov rax,[a32 rel qword fs:0xbbbbbbbb]
+ mov rbx,[a32 rel qword fs:0xbbbbbbbb]
+ mov al,[a32 rel qword fs:0xffffffffcccccccc]
+ mov bl,[a32 rel qword fs:0xffffffffcccccccc]
+ mov ax,[a32 rel qword fs:0xffffffffcccccccc]
+ mov bx,[a32 rel qword fs:0xffffffffcccccccc]
+ mov eax,[a32 rel qword fs:0xffffffffcccccccc]
+ mov ebx,[a32 rel qword fs:0xffffffffcccccccc]
+ mov rax,[a32 rel qword fs:0xffffffffcccccccc]
+ mov rbx,[a32 rel qword fs:0xffffffffcccccccc]
+
+ mov al,[es:foo]
+ mov bl,[es:foo]
+ mov ax,[es:foo]
+ mov bx,[es:foo]
+ mov eax,[es:foo]
+ mov ebx,[es:foo]
+ mov rax,[es:foo]
+ mov rbx,[es:foo]
+ mov al,[es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[es:0xaaaaaaaaaaaaaaaa]
+ mov al,[es:0xbbbbbbbb]
+ mov bl,[es:0xbbbbbbbb]
+ mov ax,[es:0xbbbbbbbb]
+ mov bx,[es:0xbbbbbbbb]
+ mov eax,[es:0xbbbbbbbb]
+ mov ebx,[es:0xbbbbbbbb]
+ mov rax,[es:0xbbbbbbbb]
+ mov rbx,[es:0xbbbbbbbb]
+ mov al,[es:0xffffffffcccccccc]
+ mov bl,[es:0xffffffffcccccccc]
+ mov ax,[es:0xffffffffcccccccc]
+ mov bx,[es:0xffffffffcccccccc]
+ mov eax,[es:0xffffffffcccccccc]
+ mov ebx,[es:0xffffffffcccccccc]
+ mov rax,[es:0xffffffffcccccccc]
+ mov rbx,[es:0xffffffffcccccccc]
+
+ mov al,[dword es:foo]
+ mov bl,[dword es:foo]
+ mov ax,[dword es:foo]
+ mov bx,[dword es:foo]
+ mov eax,[dword es:foo]
+ mov ebx,[dword es:foo]
+ mov rax,[dword es:foo]
+ mov rbx,[dword es:foo]
+ mov al,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[dword es:0xbbbbbbbb]
+ mov bl,[dword es:0xbbbbbbbb]
+ mov ax,[dword es:0xbbbbbbbb]
+ mov bx,[dword es:0xbbbbbbbb]
+ mov eax,[dword es:0xbbbbbbbb]
+ mov ebx,[dword es:0xbbbbbbbb]
+ mov rax,[dword es:0xbbbbbbbb]
+ mov rbx,[dword es:0xbbbbbbbb]
+ mov al,[dword es:0xffffffffcccccccc]
+ mov bl,[dword es:0xffffffffcccccccc]
+ mov ax,[dword es:0xffffffffcccccccc]
+ mov bx,[dword es:0xffffffffcccccccc]
+ mov eax,[dword es:0xffffffffcccccccc]
+ mov ebx,[dword es:0xffffffffcccccccc]
+ mov rax,[dword es:0xffffffffcccccccc]
+ mov rbx,[dword es:0xffffffffcccccccc]
+
+ mov al,[qword es:foo]
+ mov bl,[qword es:foo]
+ mov ax,[qword es:foo]
+ mov bx,[qword es:foo]
+ mov eax,[qword es:foo]
+ mov ebx,[qword es:foo]
+ mov rax,[qword es:foo]
+ mov rbx,[qword es:foo]
+ mov al,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[qword es:0xbbbbbbbb]
+ mov bl,[qword es:0xbbbbbbbb]
+ mov ax,[qword es:0xbbbbbbbb]
+ mov bx,[qword es:0xbbbbbbbb]
+ mov eax,[qword es:0xbbbbbbbb]
+ mov ebx,[qword es:0xbbbbbbbb]
+ mov rax,[qword es:0xbbbbbbbb]
+ mov rbx,[qword es:0xbbbbbbbb]
+ mov al,[qword es:0xffffffffcccccccc]
+ mov bl,[qword es:0xffffffffcccccccc]
+ mov ax,[qword es:0xffffffffcccccccc]
+ mov bx,[qword es:0xffffffffcccccccc]
+ mov eax,[qword es:0xffffffffcccccccc]
+ mov ebx,[qword es:0xffffffffcccccccc]
+ mov rax,[qword es:0xffffffffcccccccc]
+ mov rbx,[qword es:0xffffffffcccccccc]
+
+ mov al,[a64 es:foo]
+ mov bl,[a64 es:foo]
+ mov ax,[a64 es:foo]
+ mov bx,[a64 es:foo]
+ mov eax,[a64 es:foo]
+ mov ebx,[a64 es:foo]
+ mov rax,[a64 es:foo]
+ mov rbx,[a64 es:foo]
+ mov al,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 es:0xbbbbbbbb]
+ mov bl,[a64 es:0xbbbbbbbb]
+ mov ax,[a64 es:0xbbbbbbbb]
+ mov bx,[a64 es:0xbbbbbbbb]
+ mov eax,[a64 es:0xbbbbbbbb]
+ mov ebx,[a64 es:0xbbbbbbbb]
+ mov rax,[a64 es:0xbbbbbbbb]
+ mov rbx,[a64 es:0xbbbbbbbb]
+ mov al,[a64 es:0xffffffffcccccccc]
+ mov bl,[a64 es:0xffffffffcccccccc]
+ mov ax,[a64 es:0xffffffffcccccccc]
+ mov bx,[a64 es:0xffffffffcccccccc]
+ mov eax,[a64 es:0xffffffffcccccccc]
+ mov ebx,[a64 es:0xffffffffcccccccc]
+ mov rax,[a64 es:0xffffffffcccccccc]
+ mov rbx,[a64 es:0xffffffffcccccccc]
+
+ mov al,[a64 dword es:foo]
+ mov bl,[a64 dword es:foo]
+ mov ax,[a64 dword es:foo]
+ mov bx,[a64 dword es:foo]
+ mov eax,[a64 dword es:foo]
+ mov ebx,[a64 dword es:foo]
+ mov rax,[a64 dword es:foo]
+ mov rbx,[a64 dword es:foo]
+ mov al,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 dword es:0xbbbbbbbb]
+ mov bl,[a64 dword es:0xbbbbbbbb]
+ mov ax,[a64 dword es:0xbbbbbbbb]
+ mov bx,[a64 dword es:0xbbbbbbbb]
+ mov eax,[a64 dword es:0xbbbbbbbb]
+ mov ebx,[a64 dword es:0xbbbbbbbb]
+ mov rax,[a64 dword es:0xbbbbbbbb]
+ mov rbx,[a64 dword es:0xbbbbbbbb]
+ mov al,[a64 dword es:0xffffffffcccccccc]
+ mov bl,[a64 dword es:0xffffffffcccccccc]
+ mov ax,[a64 dword es:0xffffffffcccccccc]
+ mov bx,[a64 dword es:0xffffffffcccccccc]
+ mov eax,[a64 dword es:0xffffffffcccccccc]
+ mov ebx,[a64 dword es:0xffffffffcccccccc]
+ mov rax,[a64 dword es:0xffffffffcccccccc]
+ mov rbx,[a64 dword es:0xffffffffcccccccc]
+
+ mov al,[a64 qword es:foo]
+ mov bl,[a64 qword es:foo]
+ mov ax,[a64 qword es:foo]
+ mov bx,[a64 qword es:foo]
+ mov eax,[a64 qword es:foo]
+ mov ebx,[a64 qword es:foo]
+ mov rax,[a64 qword es:foo]
+ mov rbx,[a64 qword es:foo]
+ mov al,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 qword es:0xbbbbbbbb]
+ mov bl,[a64 qword es:0xbbbbbbbb]
+ mov ax,[a64 qword es:0xbbbbbbbb]
+ mov bx,[a64 qword es:0xbbbbbbbb]
+ mov eax,[a64 qword es:0xbbbbbbbb]
+ mov ebx,[a64 qword es:0xbbbbbbbb]
+ mov rax,[a64 qword es:0xbbbbbbbb]
+ mov rbx,[a64 qword es:0xbbbbbbbb]
+ mov al,[a64 qword es:0xffffffffcccccccc]
+ mov bl,[a64 qword es:0xffffffffcccccccc]
+ mov ax,[a64 qword es:0xffffffffcccccccc]
+ mov bx,[a64 qword es:0xffffffffcccccccc]
+ mov eax,[a64 qword es:0xffffffffcccccccc]
+ mov ebx,[a64 qword es:0xffffffffcccccccc]
+ mov rax,[a64 qword es:0xffffffffcccccccc]
+ mov rbx,[a64 qword es:0xffffffffcccccccc]
+
+ mov al,[a32 es:foo]
+ mov bl,[a32 es:foo]
+ mov ax,[a32 es:foo]
+ mov bx,[a32 es:foo]
+ mov eax,[a32 es:foo]
+ mov ebx,[a32 es:foo]
+ mov rax,[a32 es:foo]
+ mov rbx,[a32 es:foo]
+ mov al,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 es:0xbbbbbbbb]
+ mov bl,[a32 es:0xbbbbbbbb]
+ mov ax,[a32 es:0xbbbbbbbb]
+ mov bx,[a32 es:0xbbbbbbbb]
+ mov eax,[a32 es:0xbbbbbbbb]
+ mov ebx,[a32 es:0xbbbbbbbb]
+ mov rax,[a32 es:0xbbbbbbbb]
+ mov rbx,[a32 es:0xbbbbbbbb]
+ mov al,[a32 es:0xffffffffcccccccc]
+ mov bl,[a32 es:0xffffffffcccccccc]
+ mov ax,[a32 es:0xffffffffcccccccc]
+ mov bx,[a32 es:0xffffffffcccccccc]
+ mov eax,[a32 es:0xffffffffcccccccc]
+ mov ebx,[a32 es:0xffffffffcccccccc]
+ mov rax,[a32 es:0xffffffffcccccccc]
+ mov rbx,[a32 es:0xffffffffcccccccc]
+
+ mov al,[a32 dword es:foo]
+ mov bl,[a32 dword es:foo]
+ mov ax,[a32 dword es:foo]
+ mov bx,[a32 dword es:foo]
+ mov eax,[a32 dword es:foo]
+ mov ebx,[a32 dword es:foo]
+ mov rax,[a32 dword es:foo]
+ mov rbx,[a32 dword es:foo]
+ mov al,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 dword es:0xbbbbbbbb]
+ mov bl,[a32 dword es:0xbbbbbbbb]
+ mov ax,[a32 dword es:0xbbbbbbbb]
+ mov bx,[a32 dword es:0xbbbbbbbb]
+ mov eax,[a32 dword es:0xbbbbbbbb]
+ mov ebx,[a32 dword es:0xbbbbbbbb]
+ mov rax,[a32 dword es:0xbbbbbbbb]
+ mov rbx,[a32 dword es:0xbbbbbbbb]
+ mov al,[a32 dword es:0xffffffffcccccccc]
+ mov bl,[a32 dword es:0xffffffffcccccccc]
+ mov ax,[a32 dword es:0xffffffffcccccccc]
+ mov bx,[a32 dword es:0xffffffffcccccccc]
+ mov eax,[a32 dword es:0xffffffffcccccccc]
+ mov ebx,[a32 dword es:0xffffffffcccccccc]
+ mov rax,[a32 dword es:0xffffffffcccccccc]
+ mov rbx,[a32 dword es:0xffffffffcccccccc]
+
+ mov al,[a32 qword es:foo]
+ mov bl,[a32 qword es:foo]
+ mov ax,[a32 qword es:foo]
+ mov bx,[a32 qword es:foo]
+ mov eax,[a32 qword es:foo]
+ mov ebx,[a32 qword es:foo]
+ mov rax,[a32 qword es:foo]
+ mov rbx,[a32 qword es:foo]
+ mov al,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 qword es:0xbbbbbbbb]
+ mov bl,[a32 qword es:0xbbbbbbbb]
+ mov ax,[a32 qword es:0xbbbbbbbb]
+ mov bx,[a32 qword es:0xbbbbbbbb]
+ mov eax,[a32 qword es:0xbbbbbbbb]
+ mov ebx,[a32 qword es:0xbbbbbbbb]
+ mov rax,[a32 qword es:0xbbbbbbbb]
+ mov rbx,[a32 qword es:0xbbbbbbbb]
+ mov al,[a32 qword es:0xffffffffcccccccc]
+ mov bl,[a32 qword es:0xffffffffcccccccc]
+ mov ax,[a32 qword es:0xffffffffcccccccc]
+ mov bx,[a32 qword es:0xffffffffcccccccc]
+ mov eax,[a32 qword es:0xffffffffcccccccc]
+ mov ebx,[a32 qword es:0xffffffffcccccccc]
+ mov rax,[a32 qword es:0xffffffffcccccccc]
+ mov rbx,[a32 qword es:0xffffffffcccccccc]
+
+ mov al,[abs es:foo]
+ mov bl,[abs es:foo]
+ mov ax,[abs es:foo]
+ mov bx,[abs es:foo]
+ mov eax,[abs es:foo]
+ mov ebx,[abs es:foo]
+ mov rax,[abs es:foo]
+ mov rbx,[abs es:foo]
+ mov al,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs es:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs es:0xbbbbbbbb]
+ mov bl,[abs es:0xbbbbbbbb]
+ mov ax,[abs es:0xbbbbbbbb]
+ mov bx,[abs es:0xbbbbbbbb]
+ mov eax,[abs es:0xbbbbbbbb]
+ mov ebx,[abs es:0xbbbbbbbb]
+ mov rax,[abs es:0xbbbbbbbb]
+ mov rbx,[abs es:0xbbbbbbbb]
+ mov al,[abs es:0xffffffffcccccccc]
+ mov bl,[abs es:0xffffffffcccccccc]
+ mov ax,[abs es:0xffffffffcccccccc]
+ mov bx,[abs es:0xffffffffcccccccc]
+ mov eax,[abs es:0xffffffffcccccccc]
+ mov ebx,[abs es:0xffffffffcccccccc]
+ mov rax,[abs es:0xffffffffcccccccc]
+ mov rbx,[abs es:0xffffffffcccccccc]
+
+ mov al,[abs dword es:foo]
+ mov bl,[abs dword es:foo]
+ mov ax,[abs dword es:foo]
+ mov bx,[abs dword es:foo]
+ mov eax,[abs dword es:foo]
+ mov ebx,[abs dword es:foo]
+ mov rax,[abs dword es:foo]
+ mov rbx,[abs dword es:foo]
+ mov al,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs dword es:0xbbbbbbbb]
+ mov bl,[abs dword es:0xbbbbbbbb]
+ mov ax,[abs dword es:0xbbbbbbbb]
+ mov bx,[abs dword es:0xbbbbbbbb]
+ mov eax,[abs dword es:0xbbbbbbbb]
+ mov ebx,[abs dword es:0xbbbbbbbb]
+ mov rax,[abs dword es:0xbbbbbbbb]
+ mov rbx,[abs dword es:0xbbbbbbbb]
+ mov al,[abs dword es:0xffffffffcccccccc]
+ mov bl,[abs dword es:0xffffffffcccccccc]
+ mov ax,[abs dword es:0xffffffffcccccccc]
+ mov bx,[abs dword es:0xffffffffcccccccc]
+ mov eax,[abs dword es:0xffffffffcccccccc]
+ mov ebx,[abs dword es:0xffffffffcccccccc]
+ mov rax,[abs dword es:0xffffffffcccccccc]
+ mov rbx,[abs dword es:0xffffffffcccccccc]
+
+ mov al,[abs qword es:foo]
+ mov bl,[abs qword es:foo]
+ mov ax,[abs qword es:foo]
+ mov bx,[abs qword es:foo]
+ mov eax,[abs qword es:foo]
+ mov ebx,[abs qword es:foo]
+ mov rax,[abs qword es:foo]
+ mov rbx,[abs qword es:foo]
+ mov al,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[abs qword es:0xbbbbbbbb]
+ mov bl,[abs qword es:0xbbbbbbbb]
+ mov ax,[abs qword es:0xbbbbbbbb]
+ mov bx,[abs qword es:0xbbbbbbbb]
+ mov eax,[abs qword es:0xbbbbbbbb]
+ mov ebx,[abs qword es:0xbbbbbbbb]
+ mov rax,[abs qword es:0xbbbbbbbb]
+ mov rbx,[abs qword es:0xbbbbbbbb]
+ mov al,[abs qword es:0xffffffffcccccccc]
+ mov bl,[abs qword es:0xffffffffcccccccc]
+ mov ax,[abs qword es:0xffffffffcccccccc]
+ mov bx,[abs qword es:0xffffffffcccccccc]
+ mov eax,[abs qword es:0xffffffffcccccccc]
+ mov ebx,[abs qword es:0xffffffffcccccccc]
+ mov rax,[abs qword es:0xffffffffcccccccc]
+ mov rbx,[abs qword es:0xffffffffcccccccc]
+
+ mov al,[a64 abs es:foo]
+ mov bl,[a64 abs es:foo]
+ mov ax,[a64 abs es:foo]
+ mov bx,[a64 abs es:foo]
+ mov eax,[a64 abs es:foo]
+ mov ebx,[a64 abs es:foo]
+ mov rax,[a64 abs es:foo]
+ mov rbx,[a64 abs es:foo]
+ mov al,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs es:0xbbbbbbbb]
+ mov bl,[a64 abs es:0xbbbbbbbb]
+ mov ax,[a64 abs es:0xbbbbbbbb]
+ mov bx,[a64 abs es:0xbbbbbbbb]
+ mov eax,[a64 abs es:0xbbbbbbbb]
+ mov ebx,[a64 abs es:0xbbbbbbbb]
+ mov rax,[a64 abs es:0xbbbbbbbb]
+ mov rbx,[a64 abs es:0xbbbbbbbb]
+ mov al,[a64 abs es:0xffffffffcccccccc]
+ mov bl,[a64 abs es:0xffffffffcccccccc]
+ mov ax,[a64 abs es:0xffffffffcccccccc]
+ mov bx,[a64 abs es:0xffffffffcccccccc]
+ mov eax,[a64 abs es:0xffffffffcccccccc]
+ mov ebx,[a64 abs es:0xffffffffcccccccc]
+ mov rax,[a64 abs es:0xffffffffcccccccc]
+ mov rbx,[a64 abs es:0xffffffffcccccccc]
+
+ mov al,[a64 abs dword es:foo]
+ mov bl,[a64 abs dword es:foo]
+ mov ax,[a64 abs dword es:foo]
+ mov bx,[a64 abs dword es:foo]
+ mov eax,[a64 abs dword es:foo]
+ mov ebx,[a64 abs dword es:foo]
+ mov rax,[a64 abs dword es:foo]
+ mov rbx,[a64 abs dword es:foo]
+ mov al,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs dword es:0xbbbbbbbb]
+ mov bl,[a64 abs dword es:0xbbbbbbbb]
+ mov ax,[a64 abs dword es:0xbbbbbbbb]
+ mov bx,[a64 abs dword es:0xbbbbbbbb]
+ mov eax,[a64 abs dword es:0xbbbbbbbb]
+ mov ebx,[a64 abs dword es:0xbbbbbbbb]
+ mov rax,[a64 abs dword es:0xbbbbbbbb]
+ mov rbx,[a64 abs dword es:0xbbbbbbbb]
+ mov al,[a64 abs dword es:0xffffffffcccccccc]
+ mov bl,[a64 abs dword es:0xffffffffcccccccc]
+ mov ax,[a64 abs dword es:0xffffffffcccccccc]
+ mov bx,[a64 abs dword es:0xffffffffcccccccc]
+ mov eax,[a64 abs dword es:0xffffffffcccccccc]
+ mov ebx,[a64 abs dword es:0xffffffffcccccccc]
+ mov rax,[a64 abs dword es:0xffffffffcccccccc]
+ mov rbx,[a64 abs dword es:0xffffffffcccccccc]
+
+ mov al,[a64 abs qword es:foo]
+ mov bl,[a64 abs qword es:foo]
+ mov ax,[a64 abs qword es:foo]
+ mov bx,[a64 abs qword es:foo]
+ mov eax,[a64 abs qword es:foo]
+ mov ebx,[a64 abs qword es:foo]
+ mov rax,[a64 abs qword es:foo]
+ mov rbx,[a64 abs qword es:foo]
+ mov al,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 abs qword es:0xbbbbbbbb]
+ mov bl,[a64 abs qword es:0xbbbbbbbb]
+ mov ax,[a64 abs qword es:0xbbbbbbbb]
+ mov bx,[a64 abs qword es:0xbbbbbbbb]
+ mov eax,[a64 abs qword es:0xbbbbbbbb]
+ mov ebx,[a64 abs qword es:0xbbbbbbbb]
+ mov rax,[a64 abs qword es:0xbbbbbbbb]
+ mov rbx,[a64 abs qword es:0xbbbbbbbb]
+ mov al,[a64 abs qword es:0xffffffffcccccccc]
+ mov bl,[a64 abs qword es:0xffffffffcccccccc]
+ mov ax,[a64 abs qword es:0xffffffffcccccccc]
+ mov bx,[a64 abs qword es:0xffffffffcccccccc]
+ mov eax,[a64 abs qword es:0xffffffffcccccccc]
+ mov ebx,[a64 abs qword es:0xffffffffcccccccc]
+ mov rax,[a64 abs qword es:0xffffffffcccccccc]
+ mov rbx,[a64 abs qword es:0xffffffffcccccccc]
+
+ mov al,[a32 abs es:foo]
+ mov bl,[a32 abs es:foo]
+ mov ax,[a32 abs es:foo]
+ mov bx,[a32 abs es:foo]
+ mov eax,[a32 abs es:foo]
+ mov ebx,[a32 abs es:foo]
+ mov rax,[a32 abs es:foo]
+ mov rbx,[a32 abs es:foo]
+ mov al,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs es:0xbbbbbbbb]
+ mov bl,[a32 abs es:0xbbbbbbbb]
+ mov ax,[a32 abs es:0xbbbbbbbb]
+ mov bx,[a32 abs es:0xbbbbbbbb]
+ mov eax,[a32 abs es:0xbbbbbbbb]
+ mov ebx,[a32 abs es:0xbbbbbbbb]
+ mov rax,[a32 abs es:0xbbbbbbbb]
+ mov rbx,[a32 abs es:0xbbbbbbbb]
+ mov al,[a32 abs es:0xffffffffcccccccc]
+ mov bl,[a32 abs es:0xffffffffcccccccc]
+ mov ax,[a32 abs es:0xffffffffcccccccc]
+ mov bx,[a32 abs es:0xffffffffcccccccc]
+ mov eax,[a32 abs es:0xffffffffcccccccc]
+ mov ebx,[a32 abs es:0xffffffffcccccccc]
+ mov rax,[a32 abs es:0xffffffffcccccccc]
+ mov rbx,[a32 abs es:0xffffffffcccccccc]
+
+ mov al,[a32 abs dword es:foo]
+ mov bl,[a32 abs dword es:foo]
+ mov ax,[a32 abs dword es:foo]
+ mov bx,[a32 abs dword es:foo]
+ mov eax,[a32 abs dword es:foo]
+ mov ebx,[a32 abs dword es:foo]
+ mov rax,[a32 abs dword es:foo]
+ mov rbx,[a32 abs dword es:foo]
+ mov al,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs dword es:0xbbbbbbbb]
+ mov bl,[a32 abs dword es:0xbbbbbbbb]
+ mov ax,[a32 abs dword es:0xbbbbbbbb]
+ mov bx,[a32 abs dword es:0xbbbbbbbb]
+ mov eax,[a32 abs dword es:0xbbbbbbbb]
+ mov ebx,[a32 abs dword es:0xbbbbbbbb]
+ mov rax,[a32 abs dword es:0xbbbbbbbb]
+ mov rbx,[a32 abs dword es:0xbbbbbbbb]
+ mov al,[a32 abs dword es:0xffffffffcccccccc]
+ mov bl,[a32 abs dword es:0xffffffffcccccccc]
+ mov ax,[a32 abs dword es:0xffffffffcccccccc]
+ mov bx,[a32 abs dword es:0xffffffffcccccccc]
+ mov eax,[a32 abs dword es:0xffffffffcccccccc]
+ mov ebx,[a32 abs dword es:0xffffffffcccccccc]
+ mov rax,[a32 abs dword es:0xffffffffcccccccc]
+ mov rbx,[a32 abs dword es:0xffffffffcccccccc]
+
+ mov al,[a32 abs qword es:foo]
+ mov bl,[a32 abs qword es:foo]
+ mov ax,[a32 abs qword es:foo]
+ mov bx,[a32 abs qword es:foo]
+ mov eax,[a32 abs qword es:foo]
+ mov ebx,[a32 abs qword es:foo]
+ mov rax,[a32 abs qword es:foo]
+ mov rbx,[a32 abs qword es:foo]
+ mov al,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 abs qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 abs qword es:0xbbbbbbbb]
+ mov bl,[a32 abs qword es:0xbbbbbbbb]
+ mov ax,[a32 abs qword es:0xbbbbbbbb]
+ mov bx,[a32 abs qword es:0xbbbbbbbb]
+ mov eax,[a32 abs qword es:0xbbbbbbbb]
+ mov ebx,[a32 abs qword es:0xbbbbbbbb]
+ mov rax,[a32 abs qword es:0xbbbbbbbb]
+ mov rbx,[a32 abs qword es:0xbbbbbbbb]
+ mov al,[a32 abs qword es:0xffffffffcccccccc]
+ mov bl,[a32 abs qword es:0xffffffffcccccccc]
+ mov ax,[a32 abs qword es:0xffffffffcccccccc]
+ mov bx,[a32 abs qword es:0xffffffffcccccccc]
+ mov eax,[a32 abs qword es:0xffffffffcccccccc]
+ mov ebx,[a32 abs qword es:0xffffffffcccccccc]
+ mov rax,[a32 abs qword es:0xffffffffcccccccc]
+ mov rbx,[a32 abs qword es:0xffffffffcccccccc]
+
+ mov al,[rel es:foo]
+ mov bl,[rel es:foo]
+ mov ax,[rel es:foo]
+ mov bx,[rel es:foo]
+ mov eax,[rel es:foo]
+ mov ebx,[rel es:foo]
+ mov rax,[rel es:foo]
+ mov rbx,[rel es:foo]
+ mov al,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel es:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel es:0xbbbbbbbb]
+ mov bl,[rel es:0xbbbbbbbb]
+ mov ax,[rel es:0xbbbbbbbb]
+ mov bx,[rel es:0xbbbbbbbb]
+ mov eax,[rel es:0xbbbbbbbb]
+ mov ebx,[rel es:0xbbbbbbbb]
+ mov rax,[rel es:0xbbbbbbbb]
+ mov rbx,[rel es:0xbbbbbbbb]
+ mov al,[rel es:0xffffffffcccccccc]
+ mov bl,[rel es:0xffffffffcccccccc]
+ mov ax,[rel es:0xffffffffcccccccc]
+ mov bx,[rel es:0xffffffffcccccccc]
+ mov eax,[rel es:0xffffffffcccccccc]
+ mov ebx,[rel es:0xffffffffcccccccc]
+ mov rax,[rel es:0xffffffffcccccccc]
+ mov rbx,[rel es:0xffffffffcccccccc]
+
+ mov al,[rel dword es:foo]
+ mov bl,[rel dword es:foo]
+ mov ax,[rel dword es:foo]
+ mov bx,[rel dword es:foo]
+ mov eax,[rel dword es:foo]
+ mov ebx,[rel dword es:foo]
+ mov rax,[rel dword es:foo]
+ mov rbx,[rel dword es:foo]
+ mov al,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel dword es:0xbbbbbbbb]
+ mov bl,[rel dword es:0xbbbbbbbb]
+ mov ax,[rel dword es:0xbbbbbbbb]
+ mov bx,[rel dword es:0xbbbbbbbb]
+ mov eax,[rel dword es:0xbbbbbbbb]
+ mov ebx,[rel dword es:0xbbbbbbbb]
+ mov rax,[rel dword es:0xbbbbbbbb]
+ mov rbx,[rel dword es:0xbbbbbbbb]
+ mov al,[rel dword es:0xffffffffcccccccc]
+ mov bl,[rel dword es:0xffffffffcccccccc]
+ mov ax,[rel dword es:0xffffffffcccccccc]
+ mov bx,[rel dword es:0xffffffffcccccccc]
+ mov eax,[rel dword es:0xffffffffcccccccc]
+ mov ebx,[rel dword es:0xffffffffcccccccc]
+ mov rax,[rel dword es:0xffffffffcccccccc]
+ mov rbx,[rel dword es:0xffffffffcccccccc]
+
+ mov al,[rel qword es:foo]
+ mov bl,[rel qword es:foo]
+ mov ax,[rel qword es:foo]
+ mov bx,[rel qword es:foo]
+ mov eax,[rel qword es:foo]
+ mov ebx,[rel qword es:foo]
+ mov rax,[rel qword es:foo]
+ mov rbx,[rel qword es:foo]
+ mov al,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[rel qword es:0xbbbbbbbb]
+ mov bl,[rel qword es:0xbbbbbbbb]
+ mov ax,[rel qword es:0xbbbbbbbb]
+ mov bx,[rel qword es:0xbbbbbbbb]
+ mov eax,[rel qword es:0xbbbbbbbb]
+ mov ebx,[rel qword es:0xbbbbbbbb]
+ mov rax,[rel qword es:0xbbbbbbbb]
+ mov rbx,[rel qword es:0xbbbbbbbb]
+ mov al,[rel qword es:0xffffffffcccccccc]
+ mov bl,[rel qword es:0xffffffffcccccccc]
+ mov ax,[rel qword es:0xffffffffcccccccc]
+ mov bx,[rel qword es:0xffffffffcccccccc]
+ mov eax,[rel qword es:0xffffffffcccccccc]
+ mov ebx,[rel qword es:0xffffffffcccccccc]
+ mov rax,[rel qword es:0xffffffffcccccccc]
+ mov rbx,[rel qword es:0xffffffffcccccccc]
+
+ mov al,[a64 rel es:foo]
+ mov bl,[a64 rel es:foo]
+ mov ax,[a64 rel es:foo]
+ mov bx,[a64 rel es:foo]
+ mov eax,[a64 rel es:foo]
+ mov ebx,[a64 rel es:foo]
+ mov rax,[a64 rel es:foo]
+ mov rbx,[a64 rel es:foo]
+ mov al,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel es:0xbbbbbbbb]
+ mov bl,[a64 rel es:0xbbbbbbbb]
+ mov ax,[a64 rel es:0xbbbbbbbb]
+ mov bx,[a64 rel es:0xbbbbbbbb]
+ mov eax,[a64 rel es:0xbbbbbbbb]
+ mov ebx,[a64 rel es:0xbbbbbbbb]
+ mov rax,[a64 rel es:0xbbbbbbbb]
+ mov rbx,[a64 rel es:0xbbbbbbbb]
+ mov al,[a64 rel es:0xffffffffcccccccc]
+ mov bl,[a64 rel es:0xffffffffcccccccc]
+ mov ax,[a64 rel es:0xffffffffcccccccc]
+ mov bx,[a64 rel es:0xffffffffcccccccc]
+ mov eax,[a64 rel es:0xffffffffcccccccc]
+ mov ebx,[a64 rel es:0xffffffffcccccccc]
+ mov rax,[a64 rel es:0xffffffffcccccccc]
+ mov rbx,[a64 rel es:0xffffffffcccccccc]
+
+ mov al,[a64 rel dword es:foo]
+ mov bl,[a64 rel dword es:foo]
+ mov ax,[a64 rel dword es:foo]
+ mov bx,[a64 rel dword es:foo]
+ mov eax,[a64 rel dword es:foo]
+ mov ebx,[a64 rel dword es:foo]
+ mov rax,[a64 rel dword es:foo]
+ mov rbx,[a64 rel dword es:foo]
+ mov al,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel dword es:0xbbbbbbbb]
+ mov bl,[a64 rel dword es:0xbbbbbbbb]
+ mov ax,[a64 rel dword es:0xbbbbbbbb]
+ mov bx,[a64 rel dword es:0xbbbbbbbb]
+ mov eax,[a64 rel dword es:0xbbbbbbbb]
+ mov ebx,[a64 rel dword es:0xbbbbbbbb]
+ mov rax,[a64 rel dword es:0xbbbbbbbb]
+ mov rbx,[a64 rel dword es:0xbbbbbbbb]
+ mov al,[a64 rel dword es:0xffffffffcccccccc]
+ mov bl,[a64 rel dword es:0xffffffffcccccccc]
+ mov ax,[a64 rel dword es:0xffffffffcccccccc]
+ mov bx,[a64 rel dword es:0xffffffffcccccccc]
+ mov eax,[a64 rel dword es:0xffffffffcccccccc]
+ mov ebx,[a64 rel dword es:0xffffffffcccccccc]
+ mov rax,[a64 rel dword es:0xffffffffcccccccc]
+ mov rbx,[a64 rel dword es:0xffffffffcccccccc]
+
+ mov al,[a64 rel qword es:foo]
+ mov bl,[a64 rel qword es:foo]
+ mov ax,[a64 rel qword es:foo]
+ mov bx,[a64 rel qword es:foo]
+ mov eax,[a64 rel qword es:foo]
+ mov ebx,[a64 rel qword es:foo]
+ mov rax,[a64 rel qword es:foo]
+ mov rbx,[a64 rel qword es:foo]
+ mov al,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a64 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a64 rel qword es:0xbbbbbbbb]
+ mov bl,[a64 rel qword es:0xbbbbbbbb]
+ mov ax,[a64 rel qword es:0xbbbbbbbb]
+ mov bx,[a64 rel qword es:0xbbbbbbbb]
+ mov eax,[a64 rel qword es:0xbbbbbbbb]
+ mov ebx,[a64 rel qword es:0xbbbbbbbb]
+ mov rax,[a64 rel qword es:0xbbbbbbbb]
+ mov rbx,[a64 rel qword es:0xbbbbbbbb]
+ mov al,[a64 rel qword es:0xffffffffcccccccc]
+ mov bl,[a64 rel qword es:0xffffffffcccccccc]
+ mov ax,[a64 rel qword es:0xffffffffcccccccc]
+ mov bx,[a64 rel qword es:0xffffffffcccccccc]
+ mov eax,[a64 rel qword es:0xffffffffcccccccc]
+ mov ebx,[a64 rel qword es:0xffffffffcccccccc]
+ mov rax,[a64 rel qword es:0xffffffffcccccccc]
+ mov rbx,[a64 rel qword es:0xffffffffcccccccc]
+
+ mov al,[a32 rel es:foo]
+ mov bl,[a32 rel es:foo]
+ mov ax,[a32 rel es:foo]
+ mov bx,[a32 rel es:foo]
+ mov eax,[a32 rel es:foo]
+ mov ebx,[a32 rel es:foo]
+ mov rax,[a32 rel es:foo]
+ mov rbx,[a32 rel es:foo]
+ mov al,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel es:0xbbbbbbbb]
+ mov bl,[a32 rel es:0xbbbbbbbb]
+ mov ax,[a32 rel es:0xbbbbbbbb]
+ mov bx,[a32 rel es:0xbbbbbbbb]
+ mov eax,[a32 rel es:0xbbbbbbbb]
+ mov ebx,[a32 rel es:0xbbbbbbbb]
+ mov rax,[a32 rel es:0xbbbbbbbb]
+ mov rbx,[a32 rel es:0xbbbbbbbb]
+ mov al,[a32 rel es:0xffffffffcccccccc]
+ mov bl,[a32 rel es:0xffffffffcccccccc]
+ mov ax,[a32 rel es:0xffffffffcccccccc]
+ mov bx,[a32 rel es:0xffffffffcccccccc]
+ mov eax,[a32 rel es:0xffffffffcccccccc]
+ mov ebx,[a32 rel es:0xffffffffcccccccc]
+ mov rax,[a32 rel es:0xffffffffcccccccc]
+ mov rbx,[a32 rel es:0xffffffffcccccccc]
+
+ mov al,[a32 rel dword es:foo]
+ mov bl,[a32 rel dword es:foo]
+ mov ax,[a32 rel dword es:foo]
+ mov bx,[a32 rel dword es:foo]
+ mov eax,[a32 rel dword es:foo]
+ mov ebx,[a32 rel dword es:foo]
+ mov rax,[a32 rel dword es:foo]
+ mov rbx,[a32 rel dword es:foo]
+ mov al,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel dword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel dword es:0xbbbbbbbb]
+ mov bl,[a32 rel dword es:0xbbbbbbbb]
+ mov ax,[a32 rel dword es:0xbbbbbbbb]
+ mov bx,[a32 rel dword es:0xbbbbbbbb]
+ mov eax,[a32 rel dword es:0xbbbbbbbb]
+ mov ebx,[a32 rel dword es:0xbbbbbbbb]
+ mov rax,[a32 rel dword es:0xbbbbbbbb]
+ mov rbx,[a32 rel dword es:0xbbbbbbbb]
+ mov al,[a32 rel dword es:0xffffffffcccccccc]
+ mov bl,[a32 rel dword es:0xffffffffcccccccc]
+ mov ax,[a32 rel dword es:0xffffffffcccccccc]
+ mov bx,[a32 rel dword es:0xffffffffcccccccc]
+ mov eax,[a32 rel dword es:0xffffffffcccccccc]
+ mov ebx,[a32 rel dword es:0xffffffffcccccccc]
+ mov rax,[a32 rel dword es:0xffffffffcccccccc]
+ mov rbx,[a32 rel dword es:0xffffffffcccccccc]
+
+ mov al,[a32 rel qword es:foo]
+ mov bl,[a32 rel qword es:foo]
+ mov ax,[a32 rel qword es:foo]
+ mov bx,[a32 rel qword es:foo]
+ mov eax,[a32 rel qword es:foo]
+ mov ebx,[a32 rel qword es:foo]
+ mov rax,[a32 rel qword es:foo]
+ mov rbx,[a32 rel qword es:foo]
+ mov al,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bl,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ax,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov bx,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov eax,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov ebx,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rax,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov rbx,[a32 rel qword es:0xaaaaaaaaaaaaaaaa]
+ mov al,[a32 rel qword es:0xbbbbbbbb]
+ mov bl,[a32 rel qword es:0xbbbbbbbb]
+ mov ax,[a32 rel qword es:0xbbbbbbbb]
+ mov bx,[a32 rel qword es:0xbbbbbbbb]
+ mov eax,[a32 rel qword es:0xbbbbbbbb]
+ mov ebx,[a32 rel qword es:0xbbbbbbbb]
+ mov rax,[a32 rel qword es:0xbbbbbbbb]
+ mov rbx,[a32 rel qword es:0xbbbbbbbb]
+ mov al,[a32 rel qword es:0xffffffffcccccccc]
+ mov bl,[a32 rel qword es:0xffffffffcccccccc]
+ mov ax,[a32 rel qword es:0xffffffffcccccccc]
+ mov bx,[a32 rel qword es:0xffffffffcccccccc]
+ mov eax,[a32 rel qword es:0xffffffffcccccccc]
+ mov ebx,[a32 rel qword es:0xffffffffcccccccc]
+ mov rax,[a32 rel qword es:0xffffffffcccccccc]
+ mov rbx,[a32 rel qword es:0xffffffffcccccccc]
+
+
+foo:
diff --git a/test/riprel.pl b/test/riprel.pl
new file mode 100755
index 0000000..61af723
--- /dev/null
+++ b/test/riprel.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+print ";Testname=unoptimized; Arguments=-fbin -oriprel.bin -O0; Files=stdout stderr riprel.bin\n";
+print ";Testname=optimized; Arguments=-fbin -oriprel.bin -Ox; Files=stdout stderr riprel.bin\n";
+
+
+print "\tbits 64\n";
+
+foreach $mode ('abs', 'rel') {
+ print "\n\tdefault $mode\n\n";
+
+ foreach $so ('', 'fs:', 'es:') {
+ foreach $rq ('', 'abs ', 'rel ') {
+ foreach $ao ('', 'a64 ', 'a32 ') {
+ foreach $sq ('', 'dword ', 'qword ') {
+ foreach $v ('foo', '0xaaaaaaaaaaaaaaaa', '0xbbbbbbbb',
+ '0xffffffffcccccccc') {
+ foreach $r ( 'al', 'bl', 'ax', 'bx', 'eax', 'ebx', 'rax', 'rbx') {
+ print "\tmov $r,[$ao$rq$sq$so$v]\n";
+ }
+ }
+ print "\n";
+ }
+ }
+ }
+ }
+}
+
+print "\nfoo:\n";
diff --git a/test/riprel2.asm b/test/riprel2.asm
new file mode 100644
index 0000000..2d13d3e
--- /dev/null
+++ b/test/riprel2.asm
@@ -0,0 +1,11 @@
+;Testname=unoptimized; Arguments=-fbin -oriprel2.bin -O0; Files=stdout stderr riprel.bin
+;Testname=optimized; Arguments=-fbin -oriprel2.bin -Ox; Files=stdout stderr riprel.bin
+
+ bits 64
+
+ default rel
+ mov dword [foo],12345678h
+ mov qword [foo],12345678h
+ mov [foo],rax
+ mov dword [foo],12345678h
+foo:
diff --git a/test/smartalign16.asm b/test/smartalign16.asm
new file mode 100644
index 0000000..42915de
--- /dev/null
+++ b/test/smartalign16.asm
@@ -0,0 +1,36 @@
+;Testname=test; Arguments=-fbin -osmartalign16.bin; Files=stdout stderr smartalign16.bin
+
+%use smartalign
+
+ bits 16
+
+ alignmode nop, 32
+ add ax,ax
+ align 32
+
+ alignmode generic, 32
+ add ax,ax
+ align 32
+
+ alignmode k7, 32
+ add ax,ax
+ align 32
+
+ alignmode k8, 32
+ add ax,ax
+ align 32
+
+ alignmode p6, 32
+ add ax,ax
+ align 32
+
+ add ecx,ecx
+ align 32
+ add edx,edx
+ align 128
+ add ebx,ebx
+ align 256
+ add esi,esi
+ align 512
+
+ add edi,edi
diff --git a/test/smartalign32.asm b/test/smartalign32.asm
new file mode 100644
index 0000000..64d65b0
--- /dev/null
+++ b/test/smartalign32.asm
@@ -0,0 +1,36 @@
+;Testname=test; Arguments=-fbin -osmartalign32.bin; Files=stdout stderr smartalign32.bin
+
+%use smartalign
+
+ bits 32
+
+ alignmode nop, 32
+ add ax,ax
+ align 32
+
+ alignmode generic, 32
+ add ax,ax
+ align 32
+
+ alignmode k7, 32
+ add ax,ax
+ align 32
+
+ alignmode k8, 32
+ add ax,ax
+ align 32
+
+ alignmode p6, 32
+ add ax,ax
+ align 32
+
+ add ecx,ecx
+ align 32
+ add edx,edx
+ align 128
+ add ebx,ebx
+ align 256
+ add esi,esi
+ align 512
+
+ add edi,edi
diff --git a/test/smartalign64.asm b/test/smartalign64.asm
new file mode 100644
index 0000000..74454ca
--- /dev/null
+++ b/test/smartalign64.asm
@@ -0,0 +1,36 @@
+;Testname=test; Arguments=-fbin -osmartalign64.bin; Files=stdout stderr smartalign64.bin
+
+%use smartalign
+
+ bits 64
+
+ alignmode nop, 32
+ add ax,ax
+ align 32
+
+ alignmode generic, 32
+ add ax,ax
+ align 32
+
+ alignmode k7, 32
+ add ax,ax
+ align 32
+
+ alignmode k8, 32
+ add ax,ax
+ align 32
+
+ alignmode p6, 32
+ add ax,ax
+ align 32
+
+ add ecx,ecx
+ align 32
+ add edx,edx
+ align 128
+ add ebx,ebx
+ align 256
+ add esi,esi
+ align 512
+
+ add edi,edi
diff --git a/test/struc.asm b/test/struc.asm
new file mode 100644
index 0000000..3c8c1b4
--- /dev/null
+++ b/test/struc.asm
@@ -0,0 +1,33 @@
+;Testname=test; Arguments=-fbin -ostruc.bin; Files=stdout stderr struc.bin
+
+bits 32
+
+; Simple struc example
+struc teststruc1
+ .long: resd 1
+ .word: resw 1
+ .byte: resb 1
+ .str: resb 32
+endstruc
+
+; Reference with offset
+mov [ebp - 40 + teststruc1.word], ax
+
+istruc teststruc1
+ at .word, db 5
+iend
+
+; Struc with base offset
+; should be the same as the previous stuc
+struc teststruc2, -40
+ .long: resd 1
+ .word: resw 1
+ .byte: resb 1
+ .str: resb 32
+endstruc
+
+mov [ebp + teststruc2.word], ax
+
+istruc teststruc2
+ at .word, db 5
+iend
diff --git a/test/test67.asm b/test/test67.asm
new file mode 100644
index 0000000..7cf300d
--- /dev/null
+++ b/test/test67.asm
@@ -0,0 +1,38 @@
+;Testname=unoptimized; Arguments=-fbin -otest67.bin -O0; Files=stdout stderr test67.bin
+;Testname=optimized; Arguments=-fbin -otest67.bin -Ox; Files=stdout stderr test67.bin
+
+ bits 16
+
+ mov ax,[bx]
+ mov ax,[foo]
+ mov ax,[word foo]
+ mov ax,[dword foo]
+ mov ax,[ebx]
+ rep movsb
+ a16 rep movsb
+ a32 rep movsb
+ a32 mov ax,bx
+
+ bits 32
+
+ mov ax,[bx]
+ mov ax,[foo]
+ mov ax,[word foo]
+ mov ax,[dword foo]
+ mov ax,[ebx]
+ rep movsb
+ a16 rep movsb
+ a32 rep movsb
+
+ bits 64
+
+ mov ax,[rbx]
+ mov ax,[foo]
+ mov ax,[qword foo]
+ mov ax,[dword foo]
+ mov ax,[ebx]
+ rep movsb
+ a32 rep movsb
+ a64 rep movsb
+
+foo:
diff --git a/test/testdos.asm b/test/testdos.asm
new file mode 100644
index 0000000..2f6bf91
--- /dev/null
+++ b/test/testdos.asm
@@ -0,0 +1,13 @@
+;Testname=test; Arguments=-fbin -otestdos.bin; Files=stdout stderr testdos.bin
+;
+; This file was known to miscompile with the 16-bit NASM built
+; under Borland C++ 3.1, so keep it around for testing...
+;
+; The proper output looks like:
+;
+; 00000000 A10300
+; 00000003 EA0000FFFF
+;
+ org 0100h
+ mov ax,[3]
+ jmp 0FFFFh:0000
diff --git a/test/testnos3.asm b/test/testnos3.asm
new file mode 100644
index 0000000..b243e15
--- /dev/null
+++ b/test/testnos3.asm
@@ -0,0 +1,973 @@
+;Testname=test; Arguments=-fbin -otestnos3.bin; Files=stdout stderr testnos3.bin
+;
+; Double-precision floating point tests, derived from Fred Tydeman's posting
+; of 26 February 1996 to comp.arch.arithmetic, via David M. Gay's gdtoa
+; package.
+;
+ bits 64
+
+ dq 9.e0306
+ dq 0x7fa9a2028368022e
+
+ dq 4.e-079
+ dq 0x2fa7b6d71d20b96c
+
+ dq 7.e-261
+ dq 0x09eb8d7e32be6396
+
+ dq 6.e-025
+ dq 0x3ae7361cb863de62
+
+ dq 7.e-161
+ dq 0x1eaf7e0db3799aa3
+
+ dq 7.e0289
+ dq 0x7c1cbb547777a285
+
+ dq 5.e0079
+ dq 0x507afcef51f0fb5f
+
+ dq 1.e0080
+ dq 0x508afcef51f0fb5f
+
+ dq 7.e-303
+ dq 0x0133339131c46f8b
+
+ dq 5.e0152
+ dq 0x5fa317e5ef3ab327
+
+ dq 5.e0125
+ dq 0x5a07a2ecc414a03f
+
+ dq 2.e0126
+ dq 0x5a27a2ecc414a03f
+
+ dq 7.e-141
+ dq 0x22d5570f59bd178c
+
+ dq 4.e-192
+ dq 0x18323ff06eea847a
+
+ dq 9.e0043
+ dq 0x49102498ea6df0c4
+
+ dq 1.e0303
+ dq 0x7ed754e31cd072da
+
+ dq 95.e-089
+ dq 0x2dde3cbc9907fdc8
+
+ dq 85.e0194
+ dq 0x689d1c26db7d0dae
+
+ dq 69.e0267
+ dq 0x77c0b7cb60c994da
+
+ dq 97.e-019
+ dq 0x3c665dde8e688ba6
+
+ dq 37.e0046
+ dq 0x49d033d7eca0adef
+
+ dq 74.e0046
+ dq 0x49e033d7eca0adef
+
+ dq 61.e-099
+ dq 0x2bc0ad836f269a17
+
+ dq 53.e-208
+ dq 0x151b39ae1909c31b
+
+ dq 93.e-234
+ dq 0x0fc27b2e4f210075
+
+ dq 79.e-095
+ dq 0x2c9a5db812948281
+
+ dq 87.e-274
+ dq 0x0772d36cf48e7abd
+
+ dq 83.e0025
+ dq 0x4585747ab143e353
+
+ dq 17.e-036
+ dq 0x38b698ccdc60015a
+
+ dq 53.e0033
+ dq 0x47246a3418629ef6
+
+ dq 51.e-074
+ dq 0x30ecd5bee57763e6
+
+ dq 63.e-022
+ dq 0x3bbdc03b8fd7016a
+
+ dq 839.e0143
+ dq 0x5e3ae03f245703e2
+
+ dq 749.e-182
+ dq 0x1abf14727744c63e
+
+ dq 999.e-026
+ dq 0x3b282782afe1869e
+
+ dq 345.e0266
+ dq 0x77b0b7cb60c994da
+
+ dq 914.e-102
+ dq 0x2b5ffc81bc29f02b
+
+ dq 829.e0102
+ dq 0x55b7221a79cdd1d9
+
+ dq 307.e0090
+ dq 0x5322d6b183fe4b55
+
+ dq 859.e0182
+ dq 0x6654374d8b87ac63
+
+ dq 283.e0085
+ dq 0x5216c309024bab4b
+
+ dq 589.e0187
+ dq 0x675526be9c22eb17
+
+ dq 302.e0176
+ dq 0x64fdcf7df8f573b7
+
+ dq 604.e0176
+ dq 0x650dcf7df8f573b7
+
+ dq 761.e-244
+ dq 0x0de03cea3586452e
+
+ dq 647.e0230
+ dq 0x7044d64d4079150c
+
+ dq 755.e0174
+ dq 0x64a7d93193f78fc6
+
+ dq 255.e-075
+ dq 0x30dcd5bee57763e6
+
+ dq 3391.e0055
+ dq 0x4c159bd3ad46e346
+
+ dq 4147.e-015
+ dq 0x3d923d1b5eb1d778
+
+ dq 3996.e-026
+ dq 0x3b482782afe1869e
+
+ dq 1998.e-026
+ dq 0x3b382782afe1869e
+
+ dq 3338.e-296
+ dq 0x0335519ac5142aab
+
+ dq 1669.e-296
+ dq 0x0325519ac5142aab
+
+ dq 8699.e-276
+ dq 0x0772d2df246ecd2d
+
+ dq 5311.e0243
+ dq 0x73284e91f4aa0fdb
+
+ dq 7903.e-096
+ dq 0x2cd07c2d27a5b989
+
+ dq 7611.e-226
+ dq 0x11d19b8744033457
+
+ dq 3257.e0058
+ dq 0x4cb444b34a6fb3eb
+
+ dq 6514.e0058
+ dq 0x4cc444b34a6fb3eb
+
+ dq 3571.e0263
+ dq 0x77462644c61d41aa
+
+ dq 7142.e0263
+ dq 0x77562644c61d41aa
+
+ dq 5311.e0242
+ dq 0x72f3720e5d54d97c
+
+ dq 1617.e-063
+ dq 0x3384c98fce16152e
+
+ dq 51881.e0037
+ dq 0x4897d2950dc76da4
+
+ dq 31441.e-118
+ dq 0x285ef890f5de4c86
+
+ dq 30179.e0079
+ dq 0x5143e272a77478e8
+
+ dq 60358.e0079
+ dq 0x5153e272a77478e8
+
+ dq 63876.e-020
+ dq 0x3cc703856844bdbf
+
+ dq 31938.e-020
+ dq 0x3cb703856844bdbf
+
+ dq 46073.e-032
+ dq 0x3a42405b773fbdf3
+
+ dq 32941.e0051
+ dq 0x4b757eb8ad52a5c9
+
+ dq 82081.e0041
+ dq 0x49770105df3d47cb
+
+ dq 38701.e-215
+ dq 0x1440492a4a8a37fd
+
+ dq 62745.e0047
+ dq 0x4ab0c52fe6dc6a1b
+
+ dq 12549.e0048
+ dq 0x4ac0c52fe6dc6a1b
+
+ dq 64009.e-183
+ dq 0x1af099b393b84832
+
+ dq 89275.e0261
+ dq 0x77262644c61d41aa
+
+ dq 75859.e0025
+ dq 0x46232645e1ba93f0
+
+ dq 57533.e0287
+ dq 0x7c8272ed2307f56a
+
+ dq 584169.e0229
+ dq 0x70ad657059dc79aa
+
+ dq 940189.e-112
+ dq 0x29eb99d6240c1a28
+
+ dq 416121.e0197
+ dq 0x6a00fd07ed297f80
+
+ dq 832242.e0197
+ dq 0x6a10fd07ed297f80
+
+ dq 584738.e0076
+ dq 0x50e8a85eb277e645
+
+ dq 933587.e-140
+ dq 0x241b248728b9c117
+
+ dq 252601.e0121
+ dq 0x5a2dda592e398dd7
+
+ dq 358423.e0274
+ dq 0x79f9463b59b8f2bd
+
+ dq 892771.e-213
+ dq 0x14f25818c7294f27
+
+ dq 410405.e0040
+ dq 0x49670105df3d47cb
+
+ dq 928609.e-261
+ dq 0x0afbe2dd66200bef
+
+ dq 302276.e-254
+ dq 0x0c55a462d91c6ab3
+
+ dq 920657.e-023
+ dq 0x3c653a9985dbde6c
+
+ dq 609019.e-025
+ dq 0x3bf1f99e11ea0a24
+
+ dq 252601.e0120
+ dq 0x59f7e1e0f1c7a4ac
+
+ dq 654839.e-060
+ dq 0x34b00e7db3b3f242
+
+ dq 8823691.e0130
+ dq 0x5c5e597c0b94b7ae
+
+ dq 2920845.e0228
+ dq 0x709d657059dc79aa
+
+ dq 9210917.e0080
+ dq 0x51fda232347e6032
+
+ dq 5800419.e-303
+ dq 0x026e58ffa48f4fce
+
+ dq 6119898.e-243
+ dq 0x0ee3ecf22ea07863
+
+ dq 3059949.e-243
+ dq 0x0ed3ecf22ea07863
+
+ dq 2572231.e0223
+ dq 0x6f90f73be1dff9ad
+
+ dq 5444097.e-021
+ dq 0x3cf8849dd33c95af
+
+ dq 5783893.e-127
+ dq 0x26f7e5902ce0e151
+
+ dq 3865421.e-225
+ dq 0x1295d4fe53afec65
+
+ dq 4590831.e0156
+ dq 0x61b4689b4a5fa201
+
+ dq 9181662.e0156
+ dq 0x61c4689b4a5fa201
+
+ dq 5906361.e-027
+ dq 0x3bbbe45a312d08a0
+
+ dq 7315057.e0235
+ dq 0x7225f0d408362a72
+
+ dq 9088115.e0106
+ dq 0x5762e51a84a3c6a0
+
+ dq 1817623.e0107
+ dq 0x5772e51a84a3c6a0
+
+ dq 44118455.e0129
+ dq 0x5c4e597c0b94b7ae
+
+ dq 35282041.e0293
+ dq 0x7e5512d5273e62e8
+
+ dq 31279898.e-291
+ dq 0x05129b01b6885d36
+
+ dq 15639949.e-291
+ dq 0x05029b01b6885d36
+
+ dq 27966061.e0145
+ dq 0x5f955bcf72fd10f9
+
+ dq 55932122.e0145
+ dq 0x5fa55bcf72fd10f9
+
+ dq 70176353.e-053
+ dq 0x36900683a21de855
+
+ dq 40277543.e-032
+ dq 0x3adf29ca0ff893b1
+
+ dq 50609263.e0157
+ dq 0x622193aff1f1c8e3
+
+ dq 66094077.e0077
+ dq 0x518b37c4b7928317
+
+ dq 84863171.e0114
+ dq 0x59406e98f5ec8f37
+
+ dq 89396333.e0264
+ dq 0x786526f061ca9053
+
+ dq 87575437.e-309
+ dq 0x016e07320602056c
+
+ dq 78693511.e-044
+ dq 0x3870bc7b7603a2ca
+
+ dq 90285923.e-206
+ dq 0x16d1470083f89d48
+
+ dq 30155207.e-030
+ dq 0x3b423a4ad20748a2
+
+ dq 245540327.e0121
+ dq 0x5acc569e968e0944
+
+ dq 263125459.e0287
+ dq 0x7d44997a298b2f2e
+
+ dq 566446538.e-257
+ dq 0x0c64472ba9550e86
+
+ dq 283223269.e-257
+ dq 0x0c54472ba9550e86
+
+ dq 245540327.e0122
+ dq 0x5b01b6231e18c5cb
+
+ dq 491080654.e0122
+ dq 0x5b11b6231e18c5cb
+
+ dq 971212611.e-126
+ dq 0x27a397d3c9745d2f
+
+ dq 229058583.e0052
+ dq 0x4c76ce94febdc7a5
+
+ dq 325270231.e0039
+ dq 0x49cc7ccf90c9f8ab
+
+ dq 989648089.e-035
+ dq 0x3a8880a3d515e849
+
+ dq 653777767.e0273
+ dq 0x7a720223f2b3a881
+
+ dq 923091487.e0209
+ dq 0x6d30bc60e6896717
+
+ dq 526250918.e0288
+ dq 0x7d89bfd8b3edfafa
+
+ dq 350301748.e-309
+ dq 0x018e07320602056c
+
+ dq 741111169.e-203
+ dq 0x17a14fe7daf8f3ae
+
+ dq 667284113.e-240
+ dq 0x0ff09355f8050c02
+
+ dq 1227701635.e0120
+ dq 0x5abc569e968e0944
+
+ dq 9981396317.e-182
+ dq 0x1c38afe10a2a66aa
+
+ dq 5232604057.e-298
+ dq 0x041465b896c24520
+
+ dq 5572170023.e-088
+ dq 0x2fb0847822f765b2
+
+ dq 1964322616.e0122
+ dq 0x5b31b6231e18c5cb
+
+ dq 3928645232.e0122
+ dq 0x5b41b6231e18c5cb
+
+ dq 8715380633.e-058
+ dq 0x35f4614c3219891f
+
+ dq 4856063055.e-127
+ dq 0x279397d3c9745d2f
+
+ dq 8336960483.e-153
+ dq 0x223a06a1024b95e1
+
+ dq 1007046393.e-155
+ dq 0x21a01891fc4717fd
+
+ dq 5378822089.e-176
+ dq 0x1d695fd4c88d4b1b
+
+ dq 5981342308.e-190
+ dq 0x1a83db11ac608107
+
+ dq 7214782613.e-086
+ dq 0x3020b552d2edcdea
+
+ dq 5458466829.e0142
+ dq 0x5f70acde6a98eb4c
+
+ dq 9078555839.e-109
+ dq 0x2b5fc575867314ee
+
+ dq 6418488827.e0079
+ dq 0x526021f14ed7b3fa
+
+ dq 65325840981.e0069
+ dq 0x5081a151ddbd3c4a
+
+ dq 49573485983.e0089
+ dq 0x54a221bd871d2cf4
+
+ dq 46275205733.e0074
+ dq 0x51830e6c7d4e3480
+
+ dq 92550411466.e0074
+ dq 0x51930e6c7d4e3480
+
+ dq 41129842097.e-202
+ dq 0x1832c3e72d179607
+
+ dq 93227267727.e-049
+ dq 0x380960fe08d5847f
+
+ dq 41297294357.e0185
+ dq 0x688c49437fccfadb
+
+ dq 41534892987.e-067
+ dq 0x343a12666477886d
+
+ dq 42333842451.e0201
+ dq 0x6be0189a26df575f
+
+ dq 78564021519.e-227
+ dq 0x131155515fd37265
+
+ dq 53587107423.e-061
+ dq 0x35800a19a3ffd981
+
+ dq 53827010643.e-200
+ dq 0x18a32fa69a69bd6d
+
+ dq 83356057653.e0193
+ dq 0x6a4544e6daee2a18
+
+ dq 45256834646.e-118
+ dq 0x29a541ecdfd48694
+
+ dq 45392779195.e-110
+ dq 0x2b4fc575867314ee
+
+ dq 23934638219.e0291
+ dq 0x7e81deaf40ead9a0
+
+ dq 995779191233.e0113
+ dq 0x59e2d44edcc51304
+
+ dq 997422852243.e-265
+ dq 0x0b676688faee99bc
+
+ dq 653532977297.e-123
+ dq 0x28d925a0aabcdc68
+
+ dq 938885684947.e0147
+ dq 0x60f11894b202e9f4
+
+ dq 619534293513.e0124
+ dq 0x5c210c20303fe0f1
+
+ dq 539879452414.e-042
+ dq 0x39a5e66dc3d6bdb5
+
+ dq 742522891517.e0259
+ dq 0x782c1c352fc3c309
+
+ dq 254901016865.e-022
+ dq 0x3dbc06d366394441
+
+ dq 685763015669.e0280
+ dq 0x7c85fd7aa44d9477
+
+ dq 384865004907.e-285
+ dq 0x072aa65b58639e69
+
+ dq 286556458711.e0081
+ dq 0x5321958b36c5102b
+
+ dq 573112917422.e0081
+ dq 0x5331958b36c5102b
+
+ dq 769525178383.e-150
+ dq 0x234253ec0e161420
+
+ dq 416780288265.e0192
+ dq 0x6a3544e6daee2a18
+
+ dq 226963895975.e-111
+ dq 0x2b3fc575867314ee
+
+ dq 665592809339.e0063
+ dq 0x4f778b6516c2b478
+
+ dq 3891901811465.e0217
+ dq 0x6f99ab8261990292
+
+ dq 4764593340755.e0069
+ dq 0x50e4177a9915fbf8
+
+ dq 6336156586177.e0269
+ dq 0x7a7173f76c63b792
+
+ dq 8233559360849.e0095
+ dq 0x56566fee05649a7a
+
+ dq 3662265515198.e-107
+ dq 0x2c538e6edd48f2a3
+
+ dq 1831132757599.e-107
+ dq 0x2c438e6edd48f2a3
+
+ dq 7812878489261.e-179
+ dq 0x1d726dae7bbeda75
+
+ dq 6363857920591.e0145
+ dq 0x60b28a61cf9483b7
+
+ dq 8811915538555.e0082
+ dq 0x53a51f508b287ae7
+
+ dq 9997878507563.e-195
+ dq 0x1a253db2fea1ea31
+
+ dq 9224786422069.e-291
+ dq 0x0634ee5d56b32957
+
+ dq 6284426329974.e-294
+ dq 0x058d3409dfbca26f
+
+ dq 9199302046091.e-062
+ dq 0x35c135972630774c
+
+ dq 6070482281213.e-122
+ dq 0x29423fa9e6fcf47e
+
+ dq 2780161250963.e-301
+ dq 0x0405acc2053064c2
+
+ dq 8233559360849.e0094
+ dq 0x5621f324d11d4862
+
+ dq 72027097041701.e0206
+ dq 0x6d94677812d3a606
+
+ dq 97297545286625.e0215
+ dq 0x6f79ab8261990292
+
+ dq 99021992302453.e-025
+ dq 0x3da5c6714def374c
+
+ dq 54104687080198.e-022
+ dq 0x3e373cdf8db7a7bc
+
+ dq 33519685743233.e0089
+ dq 0x5537f203339c9629
+
+ dq 67039371486466.e0089
+ dq 0x5547f203339c9629
+
+ dq 39064392446305.e-180
+ dq 0x1d626dae7bbeda75
+
+ dq 17796979903653.e0261
+ dq 0x78e072f3819c1321
+
+ dq 28921916763211.e0038
+ dq 0x4a9eebabe0957af3
+
+ dq 87605699161665.e0155
+ dq 0x6302920f96e7f9ef
+
+ dq 41921560615349.e-067
+ dq 0x34d9b2a5c4041e4b
+
+ dq 80527976643809.e0061
+ dq 0x4f7c7c5aea080a49
+
+ dq 72335858886654.e-159
+ dq 0x21cce77c2b3328fc
+
+ dq 52656615219377.e0102
+ dq 0x57f561def4a9ee32
+
+ dq 15400733123779.e-072
+ dq 0x33b8bf7e7fa6f02a
+
+ dq 77003665618895.e-073
+ dq 0x33a8bf7e7fa6f02a
+
+ dq 475603213226859.e-042
+ dq 0x3a42d73088f4050a
+
+ dq 972708181182949.e0116
+ dq 0x5b218a7f36172332
+
+ dq 246411729980464.e-071
+ dq 0x342eef5e1f90ac34
+
+ dq 123205864990232.e-071
+ dq 0x341eef5e1f90ac34
+
+ dq 609610927149051.e-255
+ dq 0x0e104273b18918b1
+
+ dq 475603213226859.e-041
+ dq 0x3a778cfcab31064d
+
+ dq 672574798934795.e0065
+ dq 0x508226c684c87261
+
+ dq 134514959786959.e0066
+ dq 0x509226c684c87261
+
+ dq 294897574603217.e-151
+ dq 0x2395f2df5e675a0f
+
+ dq 723047919080275.e0036
+ dq 0x4a7eebabe0957af3
+
+ dq 660191429952702.e-088
+ dq 0x30bddc7e975c5045
+
+ dq 330095714976351.e-088
+ dq 0x30addc7e975c5045
+
+ dq 578686871093232.e-159
+ dq 0x21fce77c2b3328fc
+
+ dq 144671717773308.e-159
+ dq 0x21dce77c2b3328fc
+
+ dq 385018328094475.e-074
+ dq 0x3398bf7e7fa6f02a
+
+ dq 330095714976351.e-089
+ dq 0x3077e3987916a69e
+
+ dq 2215901545757777.e-212
+ dq 0x171a80a6e566428c
+
+ dq 1702061899637397.e-276
+ dq 0x09cacc46749dccfe
+
+ dq 1864950924021923.e0213
+ dq 0x6f53ae60753af6ca
+
+ dq 3729901848043846.e0213
+ dq 0x6f63ae60753af6ca
+
+ dq 7487252720986826.e-165
+ dq 0x20f8823a57adbef9
+
+ dq 3743626360493413.e-165
+ dq 0x20e8823a57adbef9
+
+ dq 4988915232824583.e0119
+ dq 0x5be5f6de9d5d6b5b
+
+ dq 3771476185376383.e0277
+ dq 0x7cae3c14d6916ce9
+
+ dq 6182410494241627.e-119
+ dq 0x2a81b96458445d07
+
+ dq 2572981889477453.e0142
+ dq 0x609dfc11fbf46087
+
+ dq 7793560217139653.e0051
+ dq 0x4dd280461b856ec5
+
+ dq 9163942927285259.e-202
+ dq 0x194fe601457dce4d
+
+ dq 6353227084707473.e0155
+ dq 0x63650aff653ffe8a
+
+ dq 4431803091515554.e-211
+ dq 0x176090684f5fe998
+
+ dq 9324754620109615.e0211
+ dq 0x6f0f7d6721f7f144
+
+ dq 8870461176410409.e0263
+ dq 0x79d90529a37b7e22
+
+ dq 90372559027740405.e0143
+ dq 0x612491daad0ba280
+
+ dq 18074511805548081.e0146
+ dq 0x61a011f2d73116f4
+
+ dq 54897030182071313.e0029
+ dq 0x496ec55666d8f9ec
+
+ dq 76232626624829156.e-032
+ dq 0x3ccb7738011e75fe
+
+ dq 59898021767894608.e-165
+ dq 0x2128823a57adbef9
+
+ dq 29949010883947304.e-165
+ dq 0x2118823a57adbef9
+
+ dq 26153245263757307.e0049
+ dq 0x4d83de005bd620df
+
+ dq 27176258005319167.e-261
+ dq 0x0d27c0747bd76fa1
+
+ dq 18074511805548081.e0147
+ dq 0x61d4166f8cfd5cb1
+
+ dq 24691002732654881.e-115
+ dq 0x2b759a2783ce70ab
+
+ dq 58483921078398283.e0057
+ dq 0x4f408ce499519ce3
+
+ dq 64409240769861689.e-159
+ dq 0x22692238f7987779
+
+ dq 94080055902682397.e-242
+ dq 0x11364981e39e66ca
+
+ dq 31766135423537365.e0154
+ dq 0x63550aff653ffe8a
+
+ dq 68985865317742005.e0164
+ dq 0x657a999ddec72aca
+
+ dq 13797173063548401.e0165
+ dq 0x658a999ddec72aca
+
+ dq 902042358290366539.e-281
+ dq 0x09522dc01ca1cb8c
+
+ dq 238296178309629163.e0272
+ dq 0x7c038fd93f1f5342
+
+ dq 783308178698887621.e0226
+ dq 0x72925ae62cb346d8
+
+ dq 439176241456570504.e0029
+ dq 0x499ec55666d8f9ec
+
+ dq 899810892172646163.e0283
+ dq 0x7e6adf51fa055e03
+
+ dq 926145344610700019.e-225
+ dq 0x14f307a67f1f69ff
+
+ dq 653831131593932675.e0047
+ dq 0x4d63de005bd620df
+
+ dq 130766226318786535.e0048
+ dq 0x4d73de005bd620df
+
+ dq 557035730189854663.e-294
+ dq 0x0693bfac6bc4767b
+
+ dq 902042358290366539.e-280
+ dq 0x0986b93023ca3e6f
+
+ dq 272104041512242479.e0200
+ dq 0x6d13bbb4bf05f087
+
+ dq 544208083024484958.e0200
+ dq 0x6d23bbb4bf05f087
+
+ dq 680429695511221511.e0192
+ dq 0x6b808ebc116f8a20
+
+ dq 308975121073410857.e0236
+ dq 0x7490db75cc001072
+
+ dq 792644927852378159.e0078
+ dq 0x53d7bff336d8ff06
+
+ dq 783308178698887621.e0223
+ dq 0x71f2cbac35f71140
+
+ dq 8396094300569779681.e-252
+ dq 0x0f8ab223efcee35a
+
+ dq 3507665085003296281.e-074
+ dq 0x346b85c026a264e4
+
+ dq 7322325862592278999.e0074
+ dq 0x5336775b6caa5ae0
+
+ dq 6014546754280072926.e0209
+ dq 0x6f396397b06732a4
+
+ dq 7120190517612959703.e0120
+ dq 0x5cc3220dcd5899fd
+
+ dq 3507665085003296281.e-073
+ dq 0x34a1339818257f0f
+
+ dq 4345544743100783551.e-218
+ dq 0x168a9c42e5b6d89f
+
+ dq 9778613303868468131.e-090
+ dq 0x313146fe1075e1ef
+
+ dq 7539204280836061195.e-082
+ dq 0x32d3d969e3dbe723
+
+ dq 7862637540082247119.e-202
+ dq 0x19eaba3262ee707b
+
+ dq 2176832332097939832.e0200
+ dq 0x6d43bbb4bf05f087
+
+ dq 8643988913946659879.e0115
+ dq 0x5bbe71ec1ed0a4f9
+
+ dq 5529436763613147623.e0138
+ dq 0x6079c677be6f236e
+
+ dq 6764958008109694533.e-173
+ dq 0x1fed06692e6f5ef6
+
+ dq 6802601037806061975.e0197
+ dq 0x6cbf92bacb3cb40c
+
+ dq 1360520207561212395.e0198
+ dq 0x6ccf92bacb3cb40c
+
+ dq 62259110684423957791.e0047
+ dq 0x4dcd8f2cfc20d6e8
+
+ dq 88800290202542652011.e-226
+ dq 0x1526cec51a43f41a
+
+ dq 41010852717673354694.e-221
+ dq 0x162012954b6aabba
+
+ dq 20505426358836677347.e-221
+ dq 0x161012954b6aabba
+
+ dq 66102447903809911604.e0055
+ dq 0x4f7762068a24fd55
+
+ dq 35600952588064798515.e0119
+ dq 0x5cb3220dcd5899fd
+
+ dq 14371240869903838702.e0205
+ dq 0x6e78d92d2bcc7a81
+
+ dq 57500690832492901689.e0043
+ dq 0x4cf65d3e2acd616b
+
+ dq 23432630639573022093.e-107
+ dq 0x2dbdd54c40a2f25f
+
+ dq 62259110684423957791.e0048
+ dq 0x4e02797c1d948651
+
+ dq 35620497849450218807.e-306
+ dq 0x0475b22082529425
+
+ dq 69658634627134074624.e0200
+ dq 0x6d93bbb4bf05f087
+
+ dq 99440755792436956989.e-062
+ dq 0x37362d10462a26f4
+
+ dq 55277197169490210673.e0081
+ dq 0x54d945bfa911e32a
+
+ dq 36992084760177624177.e-318
+ dq 0x01f8c5f9551c2f9a
+
+ dq 30888265282878466443.e-111
+ dq 0x2cf01b8ef28251fc
+
+ dq 2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324
+ dq 0x0000000000000000
+
+ dq 2.47032822920623272e-324
+ dq 0x0000000000000000
diff --git a/test/time.asm b/test/time.asm
new file mode 100644
index 0000000..ee4b9b7
--- /dev/null
+++ b/test/time.asm
@@ -0,0 +1,11 @@
+;Not automatically testable because it is not constant
+ db __DATE__, 13, 10
+ db __TIME__, 13, 10
+ db __UTC_DATE__, 13, 10
+ db __UTC_TIME__, 13, 10
+ align 4
+ dd __DATE_NUM__
+ dd __TIME_NUM__
+ dd __UTC_DATE_NUM__
+ dd __UTC_TIME_NUM__
+ dd __POSIX_TIME__
diff --git a/test/tmap.nas b/test/tmap.nas
new file mode 100644
index 0000000..51b477f
--- /dev/null
+++ b/test/tmap.nas
@@ -0,0 +1,1447 @@
+;; NASM note: this file abuses the section flags in such a way that
+;; NASM 0.98.37 broke when this was compiled with:
+;; nasm -o tmap.o -f elf -DLINUX tmap.nas
+
+;;-----------------------------------------------------------------------------
+;;
+;; $Id$
+;;
+;; Copyright (C) 1998-2000 by DooM Legacy Team.
+;;
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License
+;; as published by the Free Software Foundation; either version 2
+;; of the License, or (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;;
+;; $Log$
+;; Revision 1.2 2003/09/10 23:33:38 hpa
+;; Use the version of tmap.nas that actually caused problems
+;;
+;; Revision 1.10 2001/02/24 13:35:21 bpereira
+;; no message
+;;
+;; Revision 1.9 2001/02/10 15:24:19 hurdler
+;; Apply Rob's patch for Linux version
+;;
+;; Revision 1.8 2000/11/12 09:48:15 bpereira
+;; no message
+;;
+;; Revision 1.7 2000/11/06 20:52:16 bpereira
+;; no message
+;;
+;; Revision 1.6 2000/11/03 11:48:40 hurdler
+;; Fix compiling problem under win32 with 3D-Floors and FragglScript (to verify!)
+;;
+;; Revision 1.5 2000/11/03 03:27:17 stroggonmeth
+;; Again with the bug fixing...
+;;
+;; Revision 1.4 2000/11/02 17:50:10 stroggonmeth
+;; Big 3Dfloors & FraggleScript commit!!
+;;
+;; Revision 1.3 2000/04/24 20:24:38 bpereira
+;; no message
+;;
+;; Revision 1.2 2000/02/27 00:42:11 hurdler
+;; fix CR+LF problem
+;;
+;; Revision 1.1.1.1 2000/02/22 20:32:32 hurdler
+;; Initial import into CVS (v1.29 pr3)
+;;
+;;
+;; DESCRIPTION:
+;; assembler optimised rendering code for software mode
+;; draw floor spans, and wall columns.
+;;
+;;-----------------------------------------------------------------------------
+
+
+[BITS 32]
+
+%ifdef LINUX
+%macro cextern 1
+[extern %1]
+%endmacro
+
+%macro cglobal 1
+[global %1]
+%endmacro
+
+%define CODE_SEG .data
+%else
+%macro cextern 1
+%define %1 _%1
+[extern %1]
+%endmacro
+
+%macro cglobal 1
+%define %1 _%1
+[global %1]
+%endmacro
+
+%define CODE_SEG .text
+%endif
+
+
+;; externs
+;; columns
+cextern dc_x
+cextern dc_yl
+cextern dc_yh
+cextern ylookup
+cextern columnofs
+cextern dc_source
+cextern dc_texturemid
+cextern dc_iscale
+cextern centery
+cextern dc_colormap
+cextern dc_transmap
+cextern colormaps
+
+;; spans
+cextern ds_x1
+cextern ds_x2
+cextern ds_y
+cextern ds_xfrac
+cextern ds_yfrac
+cextern ds_xstep
+cextern ds_ystep
+cextern ds_source
+cextern ds_colormap
+;cextern ds_textureheight
+
+; polygon edge rasterizer
+cextern prastertab
+
+
+;;----------------------------------------------------------------------
+;;
+;; R_DrawColumn
+;;
+;; New optimised version 10-01-1998 by D.Fabrice and P.Boris
+;; TO DO: optimise it much farther... should take at most 3 cycles/pix
+;; once it's fixed, add code to patch the offsets so that it
+;; works in every screen width.
+;;
+;;----------------------------------------------------------------------
+
+[SECTION .data]
+
+;;.align 4
+loopcount dd 0
+pixelcount dd 0
+tystep dd 0
+
+[SECTION CODE_SEG write]
+
+;----------------------------------------------------------------------------
+;fixed_t FixedMul (fixed_t a, fixed_t b)
+;----------------------------------------------------------------------------
+cglobal FixedMul
+; align 16
+FixedMul:
+ mov eax,[esp+4]
+ imul dword [esp+8]
+ shrd eax,edx,16
+ ret
+
+;----------------------------------------------------------------------------
+;fixed_t FixedDiv2 (fixed_t a, fixed_t b);
+;----------------------------------------------------------------------------
+cglobal FixedDiv2
+; align 16
+FixedDiv2:
+ mov eax,[esp+4]
+ mov edx,eax ;; these two instructions allow the next
+ sar edx,31 ;; two to pair, on the Pentium processor.
+ shld edx,eax,16
+ sal eax,16
+ idiv dword [esp+8]
+ ret
+
+;----------------------------------------------------------------------------
+; void ASM_PatchRowBytes (int rowbytes);
+;----------------------------------------------------------------------------
+cglobal ASM_PatchRowBytes
+; align 16
+ASM_PatchRowBytes:
+ mov eax,[esp+4]
+ mov [p1+2],eax
+ mov [p2+2],eax
+ mov [p3+2],eax
+ mov [p4+2],eax
+ mov [p5+2],eax
+ mov [p6+2],eax
+ mov [p7+2],eax
+ mov [p8+2],eax
+ mov [p9+2],eax
+ mov [pa+2],eax
+ mov [pb+2],eax
+ mov [pc+2],eax
+ mov [pd+2],eax
+ mov [pe+2],eax
+ mov [pf+2],eax
+ mov [pg+2],eax
+ mov [ph+2],eax
+ mov [pi+2],eax
+ mov [pj+2],eax
+ mov [pk+2],eax
+ mov [pl+2],eax
+ mov [pm+2],eax
+ mov [pn+2],eax
+ mov [po+2],eax
+ mov [pp+2],eax
+ mov [pq+2],eax
+ add eax,eax
+ mov [q1+2],eax
+ mov [q2+2],eax
+ mov [q3+2],eax
+ mov [q4+2],eax
+ mov [q5+2],eax
+ mov [q6+2],eax
+ mov [q7+2],eax
+ mov [q8+2],eax
+ ret
+
+
+;----------------------------------------------------------------------------
+; 8bpp column drawer
+;----------------------------------------------------------------------------
+
+cglobal R_DrawColumn_8
+; align 16
+R_DrawColumn_8:
+ push ebp ;; preserve caller's stack frame pointer
+ push esi ;; preserve register variables
+ push edi
+ push ebx
+;;
+;; dest = ylookup[dc_yl] + columnofs[dc_x];
+;;
+ mov ebp,[dc_yl]
+ mov ebx,ebp
+ mov edi,[ylookup+ebx*4]
+ mov ebx,[dc_x]
+ add edi,[columnofs+ebx*4] ;; edi = dest
+;;
+;; pixelcount = yh - yl + 1
+;;
+ mov eax,[dc_yh]
+ inc eax
+ sub eax,ebp ;; pixel count
+ mov [pixelcount],eax ;; save for final pixel
+ jle near vdone ;; nothing to scale
+;;
+;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
+;;
+ mov ecx,[dc_iscale] ;; fracstep
+ mov eax,[centery]
+ sub eax,ebp
+ imul eax,ecx
+ mov edx,[dc_texturemid]
+ sub edx,eax
+ mov ebx,edx
+ shr ebx,16 ;; frac int.
+ and ebx,0x7f
+ shl edx,16 ;; y frac up
+
+ mov ebp,ecx
+ shl ebp,16 ;; fracstep f. up
+ shr ecx,16 ;; fracstep i. ->cl
+ and cl,0x7f
+ mov esi,[dc_source]
+;;
+;; lets rock :) !
+;;
+ mov eax,[pixelcount]
+ mov dh,al
+ shr eax,2
+ mov ch,al ;; quad count
+ mov eax,[dc_colormap]
+ test dh,0x3
+ je near v4quadloop
+;;
+;; do un-even pixel
+;;
+ test dh,0x1
+ je two_uneven
+
+ mov al,[esi+ebx] ;; prep un-even loops
+ add edx,ebp ;; ypos f += ystep f
+ adc bl,cl ;; ypos i += ystep i
+ mov dl,[eax] ;; colormap texel
+ and bl,0x7f ;; mask 0-127 texture index
+ mov [edi],dl ;; output pixel
+p1: add edi,0x12345678
+;;
+;; do two non-quad-aligned pixels
+;;
+two_uneven:
+ test dh,0x2
+ je f3
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp ;; ypos f += ystep f
+ adc bl,cl ;; ypos i += ystep i
+ mov dl,[eax] ;; colormap texel
+ and bl,0x7f ;; mask 0-127 texture index
+ mov [edi],dl ;; output pixel
+ mov al,[esi+ebx]
+ add edx,ebp ;; fetch source texel
+ adc bl,cl ;; ypos f += ystep f
+ mov dl,[eax] ;; ypos i += ystep i
+ and bl,0x7f ;; colormap texel
+p2: add edi,0x12345678 ;; mask 0-127 texture index
+ mov [edi],dl
+p3: add edi,0x12345678 ;; output pixel
+;;
+;; test if there was at least 4 pixels
+;;
+f3:
+ test ch,0xff ;; test quad count
+ je near vdone
+;;
+;; ebp : ystep frac. upper 16 bits
+;; edx : y frac. upper 16 bits
+;; ebx : y i. lower 7 bits, masked for index
+;; ecx : ch = counter, cl = y step i.
+;; eax : colormap aligned 256
+;; esi : source texture column
+;; edi : dest screen
+;;
+v4quadloop:
+ mov dh,0x7f ;; prep mask
+align 4
+vquadloop:
+ mov al,[esi+ebx] ;; prep loop
+ add edx,ebp ;; ypos f += ystep f
+ adc bl,cl ;; ypos i += ystep i
+ mov dl,[eax] ;; colormap texel
+ mov [edi],dl ;; output pixel
+ and bl,0x7f ;; mask 0-127 texture index
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp
+ adc bl,cl
+p4: add edi,0x12345678
+ mov dl,[eax]
+ and bl,0x7f
+ mov [edi],dl
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp
+ adc bl,cl
+p5: add edi,0x12345678
+ mov dl,[eax]
+ and bl,0x7f
+ mov [edi],dl
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp
+ adc bl,cl
+p6: add edi,0x12345678
+ mov dl,[eax]
+ and bl,0x7f
+ mov [edi],dl
+
+p7: add edi,0x12345678
+
+ dec ch
+ jne vquadloop
+
+vdone:
+ pop ebx ;; restore register variables
+ pop edi
+ pop esi
+ pop ebp ;; restore caller's stack frame pointer
+ ret
+
+;;----------------------------------------------------------------------
+;;13-02-98:
+;; R_DrawSkyColumn : same as R_DrawColumn but:
+;;
+;; - wrap around 256 instead of 127.
+;; this is needed because we have a higher texture for mouselook,
+;; we need at least 200 lines for the sky.
+;;
+;; NOTE: the sky should never wrap, so it could use a faster method.
+;; for the moment, we'll still use a wrapping method...
+;;
+;; IT S JUST A QUICK CUT N PASTE, WAS NOT OPTIMISED AS IT SHOULD BE !!!
+;;
+;;----------------------------------------------------------------------
+
+cglobal R_DrawSkyColumn_8
+; align 16
+R_DrawSkyColumn_8:
+ push ebp
+ push esi
+ push edi
+ push ebx
+;;
+;; dest = ylookup[dc_yl] + columnofs[dc_x];
+;;
+ mov ebp,[dc_yl]
+ mov ebx,ebp
+ mov edi,[ylookup+ebx*4]
+ mov ebx,[dc_x]
+ add edi,[columnofs+ebx*4] ;; edi = dest
+;;
+;; pixelcount = yh - yl + 1
+;;
+ mov eax,[dc_yh]
+ inc eax
+ sub eax,ebp ;; pixel count
+ mov [pixelcount],eax ;; save for final pixel
+ jle near vskydone ;; nothing to scale
+;;
+;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
+;;
+ mov ecx,[dc_iscale] ;; fracstep
+ mov eax,[centery]
+ sub eax,ebp
+ imul eax,ecx
+ mov edx,[dc_texturemid]
+ sub edx,eax
+ mov ebx,edx
+ shr ebx,16 ;; frac int.
+ and ebx,0xff
+ shl edx,16 ;; y frac up
+ mov ebp,ecx
+ shl ebp,16 ;; fracstep f. up
+ shr ecx,16 ;; fracstep i. ->cl
+ mov esi,[dc_source]
+;;
+;; lets rock :) !
+;;
+ mov eax,[pixelcount]
+ mov dh,al
+ shr eax,0x2
+ mov ch,al ;; quad count
+ mov eax,[dc_colormap]
+ test dh,0x3
+ je vskyquadloop
+;;
+;; do un-even pixel
+;;
+ test dh,0x1
+ je f2
+ mov al,[esi+ebx] ;; prep un-even loops
+ add edx,ebp ;; ypos f += ystep f
+ adc bl,cl ;; ypos i += ystep i
+ mov dl,[eax] ;; colormap texel
+ mov [edi],dl ;; output pixel
+p8: add edi,0x12345678
+;;
+;; do two non-quad-aligned pixels
+;;
+f2: test dh,0x2
+ je skyf3
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp ;; ypos f += ystep f
+ adc bl,cl ;; ypos i += ystep i
+ mov dl,[eax] ;; colormap texel
+ mov [edi],dl ;; output pixel
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp ;; ypos f += ystep f
+ adc bl,cl ;; ypos i += ystep i
+ mov dl,[eax] ;; colormap texel
+p9: add edi,0x12345678
+ mov [edi],dl ;; output pixel
+
+pa: add edi,0x12345678
+;;
+;; test if there was at least 4 pixels
+;;
+skyf3: test ch,0xff ;; test quad count
+ je vskydone
+;;
+;; ebp : ystep frac. upper 24 bits
+;; edx : y frac. upper 24 bits
+;; ebx : y i. lower 7 bits, masked for index
+;; ecx : ch = counter, cl = y step i.
+;; eax : colormap aligned 256
+;; esi : source texture column
+;; edi : dest screen
+;;
+align 4
+vskyquadloop:
+ mov al,[esi+ebx] ;; prep loop
+ add edx,ebp ;; ypos f += ystep f
+ mov dl,[eax] ;; colormap texel
+ adc bl,cl ;; ypos i += ystep i
+ mov [edi],dl ;; output pixel
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp
+ adc bl,cl
+pb: add edi,0x12345678
+ mov dl,[eax]
+ mov [edi],dl
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp
+ adc bl,cl
+pc: add edi,0x12345678
+ mov dl,[eax]
+ mov [edi],dl
+
+ mov al,[esi+ebx] ;; fetch source texel
+ add edx,ebp
+ adc bl,cl
+pd: add edi,0x12345678
+ mov dl,[eax]
+ mov [edi],dl
+
+pe: add edi,0x12345678
+
+ dec ch
+ jne vskyquadloop
+vskydone:
+ pop ebx
+ pop edi
+ pop esi
+ pop ebp
+ ret
+
+
+;;----------------------------------------------------------------------
+;; R_DrawTranslucentColumn_8
+;;
+;; Vertical column texture drawer, with transparency. Replaces Doom2's
+;; 'fuzz' effect, which was not so beautiful.
+;; Transparency is always impressive in some way, don't know why...
+;;----------------------------------------------------------------------
+
+cglobal R_DrawTranslucentColumn_8
+R_DrawTranslucentColumn_8:
+ push ebp ;; preserve caller's stack frame pointer
+ push esi ;; preserve register variables
+ push edi
+ push ebx
+;;
+;; dest = ylookup[dc_yl] + columnofs[dc_x];
+;;
+ mov ebp,[dc_yl]
+ mov ebx,ebp
+ mov edi,[ylookup+ebx*4]
+ mov ebx,[dc_x]
+ add edi,[columnofs+ebx*4] ;; edi = dest
+;;
+;; pixelcount = yh - yl + 1
+;;
+ mov eax,[dc_yh]
+ inc eax
+ sub eax,ebp ;; pixel count
+ mov [pixelcount],eax ;; save for final pixel
+ jle near vtdone ;; nothing to scale
+;;
+;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
+;;
+ mov ecx,[dc_iscale] ;; fracstep
+ mov eax,[centery]
+ sub eax,ebp
+ imul eax,ecx
+ mov edx,[dc_texturemid]
+ sub edx,eax
+ mov ebx,edx
+
+ shr ebx,16 ;; frac int.
+ and ebx,0x7f
+ shl edx,16 ;; y frac up
+
+ mov ebp,ecx
+ shl ebp,16 ;; fracstep f. up
+ shr ecx,16 ;; fracstep i. ->cl
+ and cl,0x7f
+ push cx
+ mov ecx,edx
+ pop cx
+ mov edx,[dc_colormap]
+ mov esi,[dc_source]
+;;
+;; lets rock :) !
+;;
+ mov eax,[pixelcount]
+ shr eax,0x2
+ test byte [pixelcount],0x3
+ mov ch,al ;; quad count
+ mov eax,[dc_transmap]
+ je vt4quadloop
+;;
+;; do un-even pixel
+;;
+ test byte [pixelcount],0x1
+ je trf2
+
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ add ecx,ebp
+ adc bl,cl
+ mov al,[edi] ;; fetch dest : index into colormap
+ and bl,0x7f
+ mov dl,[eax]
+ mov dl,[edx]
+ mov [edi],dl
+pf: add edi,0x12345678
+;;
+;; do two non-quad-aligned pixels
+;;
+trf2: test byte [pixelcount],0x2
+ je trf3
+
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ add ecx,ebp
+ adc bl,cl
+ mov al,[edi] ;; fetch dest : index into colormap
+ and bl,0x7f
+ mov dl,[eax]
+ mov dl,[edx]
+ mov [edi],dl
+pg: add edi,0x12345678
+
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ add ecx,ebp
+ adc bl,cl
+ mov al,[edi] ;; fetch dest : index into colormap
+ and bl,0x7f
+ mov dl,[eax]
+ mov dl,[edx]
+ mov [edi],dl
+ph: add edi,0x12345678
+;;
+;; test if there was at least 4 pixels
+;;
+trf3: test ch,0xff ;; test quad count
+ je near vtdone
+
+;;
+;; ebp : ystep frac. upper 24 bits
+;; edx : y frac. upper 24 bits
+;; ebx : y i. lower 7 bits, masked for index
+;; ecx : ch = counter, cl = y step i.
+;; eax : colormap aligned 256
+;; esi : source texture column
+;; edi : dest screen
+;;
+vt4quadloop:
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov [tystep],ebp
+pi: add edi,0x12345678
+ mov al,[edi] ;; fetch dest : index into colormap
+pj: sub edi,0x12345678
+ mov ebp,edi
+pk: sub edi,0x12345678
+ jmp short inloop
+align 4
+vtquadloop:
+ add ecx,[tystep]
+ adc bl,cl
+q1: add ebp,0x23456789
+ and bl,0x7f
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov dl,[edx]
+ mov [edi],dl
+ mov al,[ebp] ;; fetch dest : index into colormap
+inloop:
+ add ecx,[tystep]
+ adc bl,cl
+q2: add edi,0x23456789
+ and bl,0x7f
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov dl,[edx]
+ mov [ebp+0x0],dl
+ mov al,[edi] ;; fetch dest : index into colormap
+
+ add ecx,[tystep]
+ adc bl,cl
+q3: add ebp,0x23456789
+ and bl,0x7f
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov dl,[edx]
+ mov [edi],dl
+ mov al,[ebp] ;; fetch dest : index into colormap
+
+ add ecx,[tystep]
+ adc bl,cl
+q4: add edi,0x23456789
+ and bl,0x7f
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov dl,[edx]
+ mov [ebp],dl
+ mov al,[edi] ;; fetch dest : index into colormap
+
+ dec ch
+ jne vtquadloop
+vtdone:
+ pop ebx
+ pop edi
+ pop esi
+ pop ebp
+ ret
+
+
+;;----------------------------------------------------------------------
+;; R_DrawShadeColumn
+;;
+;; for smoke..etc.. test.
+;;----------------------------------------------------------------------
+cglobal R_DrawShadeColumn_8
+R_DrawShadeColumn_8:
+ push ebp ;; preserve caller's stack frame pointer
+ push esi ;; preserve register variables
+ push edi
+ push ebx
+
+;;
+;; dest = ylookup[dc_yl] + columnofs[dc_x];
+;;
+ mov ebp,[dc_yl]
+ mov ebx,ebp
+ mov edi,[ylookup+ebx*4]
+ mov ebx,[dc_x]
+ add edi,[columnofs+ebx*4] ;; edi = dest
+;;
+;; pixelcount = yh - yl + 1
+;;
+ mov eax,[dc_yh]
+ inc eax
+ sub eax,ebp ;; pixel count
+ mov [pixelcount],eax ;; save for final pixel
+ jle near shdone ;; nothing to scale
+;;
+;; frac = dc_texturemid - (centery-dc_yl)*fracstep;
+;;
+ mov ecx,[dc_iscale] ;; fracstep
+ mov eax,[centery]
+ sub eax,ebp
+ imul eax,ecx
+ mov edx,[dc_texturemid]
+ sub edx,eax
+ mov ebx,edx
+ shr ebx,16 ;; frac int.
+ and ebx,byte +0x7f
+ shl edx,16 ;; y frac up
+
+ mov ebp,ecx
+ shl ebp,16 ;; fracstep f. up
+ shr ecx,16 ;; fracstep i. ->cl
+ and cl,0x7f
+
+ mov esi,[dc_source]
+;;
+;; lets rock :) !
+;;
+ mov eax,[pixelcount]
+ mov dh,al
+ shr eax,2
+ mov ch,al ;; quad count
+ mov eax,[colormaps]
+ test dh,3
+ je sh4quadloop
+;;
+;; do un-even pixel
+;;
+ test dh,0x1
+ je shf2
+
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ add edx,ebp
+ adc bl,cl
+ mov al,[edi] ;; fetch dest : index into colormap
+ and bl,0x7f
+ mov dl,[eax]
+ mov [edi],dl
+pl: add edi,0x12345678
+;;
+;; do two non-quad-aligned pixels
+;;
+shf2:
+ test dh,0x2
+ je shf3
+
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ add edx,ebp
+ adc bl,cl
+ mov al,[edi] ;; fetch dest : index into colormap
+ and bl,0x7f
+ mov dl,[eax]
+ mov [edi],dl
+pm: add edi,0x12345678
+
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ add edx,ebp
+ adc bl,cl
+ mov al,[edi] ;; fetch dest : index into colormap
+ and bl,0x7f
+ mov dl,[eax]
+ mov [edi],dl
+pn: add edi,0x12345678
+;;
+;; test if there was at least 4 pixels
+;;
+shf3:
+ test ch,0xff ;; test quad count
+ je near shdone
+
+;;
+;; ebp : ystep frac. upper 24 bits
+;; edx : y frac. upper 24 bits
+;; ebx : y i. lower 7 bits, masked for index
+;; ecx : ch = counter, cl = y step i.
+;; eax : colormap aligned 256
+;; esi : source texture column
+;; edi : dest screen
+;;
+sh4quadloop:
+ mov dh,0x7f ;; prep mask
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov [tystep],ebp
+po: add edi,0x12345678
+ mov al,[edi] ;; fetch dest : index into colormap
+pp: sub edi,0x12345678
+ mov ebp,edi
+pq: sub edi,0x12345678
+ jmp short shinloop
+
+align 4
+shquadloop:
+ add edx,[tystep]
+ adc bl,cl
+ and bl,dh
+q5: add ebp,0x12345678
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov [edi],dl
+ mov al,[ebp] ;; fetch dest : index into colormap
+shinloop:
+ add edx,[tystep]
+ adc bl,cl
+ and bl,dh
+q6: add edi,0x12345678
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov [ebp],dl
+ mov al,[edi] ;; fetch dest : index into colormap
+
+ add edx,[tystep]
+ adc bl,cl
+ and bl,dh
+q7: add ebp,0x12345678
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov [edi],dl
+ mov al,[ebp] ;; fetch dest : index into colormap
+
+ add edx,[tystep]
+ adc bl,cl
+ and bl,dh
+q8: add edi,0x12345678
+ mov dl,[eax]
+ mov ah,[esi+ebx] ;; fetch texel : colormap number
+ mov [ebp],dl
+ mov al,[edi] ;; fetch dest : index into colormap
+
+ dec ch
+ jne shquadloop
+
+shdone:
+ pop ebx ;; restore register variables
+ pop edi
+ pop esi
+ pop ebp ;; restore caller's stack frame pointer
+ ret
+
+
+
+;;----------------------------------------------------------------------
+;;
+;; R_DrawSpan
+;;
+;; Horizontal texture mapping
+;;
+;;----------------------------------------------------------------------
+
+
+[SECTION .data]
+
+oldcolormap dd 0
+
+[SECTION CODE_SEG write]
+
+cglobal R_DrawSpan_8
+R_DrawSpan_8:
+ push ebp ;; preserve caller's stack frame pointer
+ push esi ;; preserve register variables
+ push edi
+ push ebx
+;;
+;; initilise registers
+;;
+
+ mov edx, [ds_xfrac]
+ mov eax, [ds_ystep]
+ ror edx, 14
+ ror eax, 15
+ mov bl, dl
+ mov ecx, [ds_xstep]
+ mov dh, al
+ mov ax, 1
+ mov [tystep], eax
+
+
+ mov eax, [ds_yfrac]
+ ror ecx, 13
+ ror eax, 16
+ mov dl, cl
+ mov bh, al
+ xor cx, cx
+ and ebx, 0x3fff
+ mov [pixelcount],ecx
+
+ mov ecx, [ds_x2]
+ mov edi, [ds_y]
+ mov esi, [ds_x1]
+ mov edi, [ylookup+edi*4]
+ mov ebp, ebx
+ add edi, [columnofs+esi*4]
+ sub esi, ecx ;; pixel count
+ shr ebp, 2
+ mov ecx, [ds_colormap]
+ mov ax, si
+ mov esi, [ds_source]
+ sar ax,1
+ jnc near .midloop ;; check parity
+
+; summary
+; edx = high16bit xfrac[0..13], ah=ystep[16..24] al=xtep[14..21]
+; ebx = high16bit =0, bh=yfrac[16..24], bl=xfrac[14..21]
+; ecx = colormap table cl=0 (colormap is aligned 8 bits)
+; eax = high16bit yfrac[0..15], dx = count
+; esi = flat texture source
+; edi = screeen buffer destination
+; ebp = work register
+; pixelcount = high16bit xstep[0..13] rest to 0
+; tystep = high16bit ystep[0..15] low 16 bit = 2 (increment of count)
+
+align 4
+.loop
+ add eax, [tystep]
+ mov cl, [esi+ebp]
+ adc bh, dh
+ mov cl, [ecx]
+ and bh, 0x3f
+ mov [edi], cl
+ mov ebp, ebx
+ inc edi
+ shr ebp, 2
+
+.midloop:
+ add edx, [pixelcount]
+ mov cl, [esi+ebp]
+ adc bl, dl
+ mov cl, [ecx]
+ mov ebp, ebx
+ mov [edi], cl
+ inc edi
+ shr ebp, 2
+
+ test eax, 0xffff
+ jnz near .loop
+
+.hdone: pop ebx ;; restore register variables
+ pop edi
+ pop esi
+ pop ebp ;; restore caller's stack frame pointer
+ ret
+
+
+[SECTION .data]
+
+obelix dd 0
+etaussi dd 0
+
+[SECTION CODE_SEG]
+
+cglobal R_DrawSpan_8_old
+R_DrawSpan_8_old:
+ push ebp ;; preserve caller's stack frame pointer
+ push esi ;; preserve register variables
+ push edi
+ push ebx
+;;
+;; find loop count
+;;
+ mov eax,[ds_x2]
+ inc eax
+ sub eax,[ds_x1] ;; pixel count
+ mov [pixelcount],eax ;; save for final pixel
+ js near .hdone ;; nothing to scale
+ shr eax,0x1 ;; double pixel count
+ mov [loopcount],eax
+;;
+;; build composite position
+;;
+ mov ebp,[ds_xfrac]
+ shl ebp,10
+ and ebp,0xffff0000
+ mov eax,[ds_yfrac]
+ shr eax,6
+ and eax,0xffff
+ mov edi,[ds_y]
+ or ebp,eax
+
+ mov esi,[ds_source]
+;;
+;; calculate screen dest
+;;
+ mov edi,[ylookup+edi*4]
+ mov eax,[ds_x1]
+ add edi,[columnofs+eax*4]
+;;
+;; build composite step
+;;
+ mov ebx,[ds_xstep]
+ shl ebx,10
+ and ebx,0xffff0000
+ mov eax,[ds_ystep]
+ shr eax,6
+ and eax,0xffff
+ or ebx,eax
+
+ mov [obelix],ebx
+ mov [etaussi],esi
+
+;; %eax aligned colormap
+;; %ebx aligned colormap
+;; %ecx,%edx scratch
+;; %esi virtual source
+;; %edi moving destination pointer
+;; %ebp frac
+
+ mov eax,[ds_colormap]
+ mov ecx,ebp
+ add ebp,ebx ;; advance frac pointer
+ shr cx,10
+ rol ecx,6
+ and ecx,4095 ;; finish calculation for third pixel
+ mov edx,ebp
+ shr dx,10
+ rol edx,6
+ add ebp,ebx ;; advance frac pointer
+ and edx,4095 ;; finish calculation for fourth pixel
+ mov ebx,eax
+ mov al,[esi+ecx] ;; get first pixel
+ mov bl,[esi+edx] ;; get second pixel
+
+ test dword [pixelcount],0xfffffffe
+
+ mov dl,[eax] ;; color translate first pixel
+
+;; movw $0xf0f0,%dx ;;see visplanes start
+
+ je .hchecklast
+
+ mov dh,[ebx] ;; color translate second pixel
+ mov esi,[loopcount]
+align 4
+.hdoubleloop:
+ mov ecx,ebp
+ shr cx,10
+ rol ecx,6
+ add ebp,[obelix] ;; advance frac pointer
+ mov [edi],dx ;; write first pixel
+ and ecx,4095 ;; finish calculation for third pixel
+ mov edx,ebp
+ shr dx,10
+ rol edx,6
+ add ecx,[etaussi]
+ and edx,4095 ;; finish calculation for fourth pixel
+ mov al,[ecx] ;; get third pixel
+ add ebp,[obelix] ;; advance frac pointer
+ add edx,[etaussi]
+ mov bl,[edx] ;; get fourth pixel
+ mov dl,[eax] ;; color translate third pixel
+ add edi,byte +0x2 ;; advance to third pixel destination
+ dec esi ;; done with loop?
+ mov dh,[ebx] ;; color translate fourth pixel
+ jne .hdoubleloop
+;; check for final pixel
+.hchecklast:
+ test dword [pixelcount],0x1
+ je .hdone
+ mov [edi],dl ;; write final pixel
+.hdone: pop ebx ;; restore register variables
+ pop edi
+ pop esi
+ pop ebp ;; restore caller's stack frame pointer
+ ret
+
+
+;; ========================================================================
+;; Rasterization des segments d'un polyg“ne textur‚ de maniŠre LINEAIRE.
+;; Il s'agit donc d'interpoler les coordonn‚es aux bords de la texture en
+;; mˆme temps que les abscisses minx/maxx pour chaque ligne.
+;; L'argument 'dir' indique quels bords de la texture sont interpolés:
+;; 0 : segments associ‚s aux bord SUPERIEUR et INFERIEUR ( TY constant )
+;; 1 : segments associ‚s aux bord GAUCHE et DROITE ( TX constant )
+;; ========================================================================
+;;
+;; void rasterize_segment_tex( LONG x1, LONG y1, LONG x2, LONG y2, LONG tv1, LONG tv2, LONG tc, LONG dir );
+;; ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8
+;;
+;; Pour dir = 0, (tv1,tv2) = (tX1,tX2), tc = tY, en effet TY est constant.
+;;
+;; Pour dir = 1, (tv1,tv2) = (tY1,tY2), tc = tX, en effet TX est constant.
+;;
+;;
+;; Uses: extern struct rastery *_rastertab;
+;;
+
+[SECTION CODE_SEG write]
+
+MINX EQU 0
+MAXX EQU 4
+TX1 EQU 8
+TY1 EQU 12
+TX2 EQU 16
+TY2 EQU 20
+RASTERY_SIZEOF EQU 24
+
+cglobal rasterize_segment_tex
+rasterize_segment_tex:
+ push ebp
+ mov ebp,esp
+
+ sub esp,byte +0x8 ;; alloue les variables locales
+
+ push ebx
+ push esi
+ push edi
+ o16 mov ax,es
+ push eax
+
+;; #define DX [ebp-4]
+;; #define TD [ebp-8]
+
+ mov eax,[ebp+0xc] ;; y1
+ mov ebx,[ebp+0x14] ;; y2
+ cmp ebx,eax
+ je near .L_finished ;; special (y1==y2) segment horizontal, exit!
+
+ jg near .L_rasterize_right
+
+;;rasterize_left: ;; on rasterize un segment … la GAUCHE du polyg“ne
+
+ mov ecx,eax
+ sub ecx,ebx
+ inc ecx ;; y1-y2+1
+
+ mov eax,RASTERY_SIZEOF
+ mul ebx ;; * y2
+ mov esi,[prastertab]
+ add esi,eax ;; point into rastertab[y2]
+
+ mov eax,[ebp+0x8] ;; ARG1
+ sub eax,[ebp+0x10] ;; ARG3
+ shl eax,0x10 ;; ((x1-x2)<<PRE) ...
+ cdq
+ idiv ecx ;; dx = ... / (y1-y2+1)
+ mov [ebp-0x4],eax ;; DX
+
+ mov eax,[ebp+0x18] ;; ARG5
+ sub eax,[ebp+0x1c] ;; ARG6
+ shl eax,0x10
+ cdq
+ idiv ecx ;; tdx =((tx1-tx2)<<PRE) / (y1-y2+1)
+ mov [ebp-0x8],eax ;; idem tdy =((ty1-ty2)<<PRE) / (y1-y2+1)
+
+ mov eax,[ebp+0x10] ;; ARG3
+ shl eax,0x10 ;; x = x2<<PRE
+
+ mov ebx,[ebp+0x1c] ;; ARG6
+ shl ebx,0x10 ;; tx = tx2<<PRE d0
+ ;; ty = ty2<<PRE d1
+ mov edx,[ebp+0x20] ;; ARG7
+ shl edx,0x10 ;; ty = ty<<PRE d0
+ ;; tx = tx<<PRE d1
+ push ebp
+ mov edi,[ebp-0x4] ;; DX
+ cmp dword [ebp+0x24],byte +0x0 ;; ARG8 direction ?
+
+ mov ebp,[ebp-0x8] ;; TD
+ je .L_rleft_h_loop
+;;
+;; TY varie, TX est constant
+;;
+.L_rleft_v_loop:
+ mov [esi+MINX],eax ;; rastertab[y].minx = x
+ add ebx,ebp
+ mov [esi+TX1],edx ;; .tx1 = tx
+ add eax,edi
+ mov [esi+TY1],ebx ;; .ty1 = ty
+
+ ;;addl DX, %eax // x += dx
+ ;;addl TD, %ebx // ty += tdy
+
+ add esi,RASTERY_SIZEOF ;; next raster line into rastertab[]
+ dec ecx
+ jne .L_rleft_v_loop
+ pop ebp
+ jmp .L_finished
+;;
+;; TX varie, TY est constant
+;;
+.L_rleft_h_loop:
+ mov [esi+MINX],eax ;; rastertab[y].minx = x
+ add eax,edi
+ mov [esi+TX1],ebx ;; .tx1 = tx
+ add ebx,ebp
+ mov [esi+TY1],edx ;; .ty1 = ty
+
+ ;;addl DX, %eax // x += dx
+ ;;addl TD, %ebx // tx += tdx
+
+ add esi,RASTERY_SIZEOF ;; next raster line into rastertab[]
+ dec ecx
+ jne .L_rleft_h_loop
+ pop ebp
+ jmp .L_finished
+;;
+;; on rasterize un segment … la DROITE du polyg“ne
+;;
+.L_rasterize_right:
+ mov ecx,ebx
+ sub ecx,eax
+ inc ecx ;; y2-y1+1
+
+ mov ebx,RASTERY_SIZEOF
+ mul ebx ;; * y1
+ mov esi,[prastertab]
+ add esi,eax ;; point into rastertab[y1]
+
+ mov eax,[ebp+0x10] ;; ARG3
+ sub eax,[ebp+0x8] ;; ARG1
+ shl eax,0x10 ;; ((x2-x1)<<PRE) ...
+ cdq
+ idiv ecx ;; dx = ... / (y2-y1+1)
+ mov [ebp-0x4],eax ;; DX
+
+ mov eax,[ebp+0x1c] ;; ARG6
+ sub eax,[ebp+0x18] ;; ARG5
+ shl eax,0x10
+ cdq
+ idiv ecx ;; tdx =((tx2-tx1)<<PRE) / (y2-y1+1)
+ mov [ebp-0x8],eax ;; idem tdy =((ty2-ty1)<<PRE) / (y2-y1+1)
+
+ mov eax,[ebp+0x8] ;; ARG1
+ shl eax,0x10 ;; x = x1<<PRE
+
+ mov ebx,[ebp+0x18] ;; ARG5
+ shl ebx,0x10 ;; tx = tx1<<PRE d0
+ ;; ty = ty1<<PRE d1
+ mov edx,[ebp+0x20] ;; ARG7
+ shl edx,0x10 ;; ty = ty<<PRE d0
+ ;; tx = tx<<PRE d1
+ push ebp
+ mov edi,[ebp-0x4] ;; DX
+
+ cmp dword [ebp+0x24], 0 ;; direction ?
+
+ mov ebp,[ebp-0x8] ;; TD
+ je .L_rright_h_loop
+;;
+;; TY varie, TX est constant
+;;
+.L_rright_v_loop:
+
+ mov [esi+MAXX],eax ;; rastertab[y].maxx = x
+ add ebx,ebp
+ mov [esi+TX2],edx ;; .tx2 = tx
+ add eax,edi
+ mov [esi+TY2],ebx ;; .ty2 = ty
+
+ ;;addl DX, %eax // x += dx
+ ;;addl TD, %ebx // ty += tdy
+
+ add esi,RASTERY_SIZEOF
+ dec ecx
+ jne .L_rright_v_loop
+
+ pop ebp
+
+ jmp short .L_finished
+;;
+;; TX varie, TY est constant
+;;
+.L_rright_h_loop:
+ mov [esi+MAXX],eax ;; rastertab[y].maxx = x
+ add eax,edi
+ mov [esi+TX2],ebx ;; .tx2 = tx
+ add ebx,ebp
+ mov [esi+TY2],edx ;; .ty2 = ty
+
+ ;;addl DX, %eax // x += dx
+ ;;addl TD, %ebx // tx += tdx
+
+ add esi,RASTERY_SIZEOF
+ dec ecx
+ jne .L_rright_h_loop
+
+ pop ebp
+
+.L_finished:
+ pop eax
+ o16 mov es,ax
+ pop edi
+ pop esi
+ pop ebx
+
+ mov esp,ebp
+ pop ebp
+ ret
+
+
+;;; this version can draw 64x64 tiles, but they would have to be arranged 4 per row,
+;; so that the stride from one line to the next is 256
+;;
+;; .data
+;;xstep dd 0
+;;ystep dd 0
+;;texwidth dd 64 ;; texture width
+;; .text
+;; this code is kept in case we add high-detail floor textures for example (256x256)
+; align 16
+;_R_DrawSpan_8:
+; push ebp ;; preserve caller's stack frame pointer
+; push esi ;; preserve register variables
+; push edi
+; push ebx
+;;
+;; find loop count
+;;
+; mov eax,[ds_x2]
+; inc eax
+; sub eax,[ds_x1] ;; pixel count
+; mov [pixelcount],eax ;; save for final pixel
+; js near .hdone ;; nothing to scale
+;;
+;; calculate screen dest
+;;
+; mov edi,[ds_y]
+; mov edi,[ylookup+edi*4]
+; mov eax,[ds_x1]
+; add edi,[columnofs+eax*4]
+;;
+;; prepare registers for inner loop
+;;
+; xor eax,eax
+; mov edx,[ds_xfrac]
+; ror edx,16
+; mov al,dl
+; mov ecx,[ds_yfrac]
+; ror ecx,16
+; mov ah,cl
+;
+; mov ebx,[ds_xstep]
+; ror ebx,16
+; mov ch,bl
+; and ebx,0xffff0000
+; mov [xstep],ebx
+; mov ebx,[ds_ystep]
+; ror ebx,16
+; mov dh,bl
+; and ebx,0xffff0000
+; mov [ystep],ebx
+;
+; mov esi,[ds_source]
+;
+;;; %eax Yi,Xi in %ah,%al
+;;; %ebx aligned colormap
+;;; %ecx Yfrac upper, dXi in %ch, %cl is counter (upto 1024pels, =4x256)
+;;; %edx Xfrac upper, dYi in %dh, %dl receives mapped pixels from (ebx)
+;;; ystep dYfrac, add to %ecx, low word is 0
+;;; xstep dXfrac, add to %edx, low word is 0
+;;; %ebp temporary register serves as offset like %eax
+;;; %esi virtual source
+;;; %edi moving destination pointer
+;
+; mov ebx,[pixelcount]
+; shr ebx,0x2 ;; 4 pixels per loop
+; test bl,0xff
+; je near .hchecklast
+; mov cl,bl
+;
+; mov ebx,[dc_colormap]
+;;;
+;;; prepare loop with first pixel
+;;;
+; add ecx,[ystep] ;;pr‚a1
+; adc ah,dh
+; add edx,[xstep]
+; adc al,ch
+; and eax,0x3f3f
+; mov bl,[esi+eax] ;;pr‚b1
+; mov dl,[ebx] ;;pr‚c1
+;
+; add ecx,[ystep] ;;a2
+; adc ah,dh
+;
+;.hdoubleloop:
+; mov [edi+1],dl
+; add edx,[xstep]
+; adc al,ch
+; add edi,byte +0x2
+; mov ebp,eax
+; add ecx,[ystep]
+; adc ah,dh
+; and ebp,0x3f3f
+; add edx,[xstep]
+; mov bl,[esi+ebp]
+; adc al,ch
+; mov dl,[ebx]
+; and eax,0x3f3f
+; mov [edi],dl
+; mov bl,[esi+eax]
+; add ecx,[ystep]
+; adc ah,dh
+; add edx,[xstep]
+; adc al,ch
+; mov dl,[ebx]
+; mov ebp,eax
+; mov [edi+1],dl
+; and ebp,0x3f3f
+; add ecx,[ystep]
+; adc ah,dh
+; mov bl,[esi+ebp]
+; add edi,byte +0x2
+; add edx,[xstep]
+; adc al,ch
+; mov dl,[ebx]
+; and eax,0x3f3f
+; mov [edi],dl
+; mov bl,[esi+eax]
+; add ecx,[ystep]
+; adc ah,dh
+; mov dl,[ebx]
+; dec cl
+; jne near .hdoubleloop
+;;; check for final pixel
+;.hchecklast:
+;;; to do
+;.hdone:
+; pop ebx
+; pop edi
+; pop esi
+; pop ebp
+; ret
diff --git a/test/uscore.asm b/test/uscore.asm
new file mode 100644
index 0000000..ec61443
--- /dev/null
+++ b/test/uscore.asm
@@ -0,0 +1,15 @@
+;Testname=test; Arguments=-fbin -ouscore.bin; Files=stdout stderr uscore.bin
+ dd 0x1234_5678
+ dd 305_419_896 ; Same number as above it
+ dd 0x1e16 ; NOT a floating-point number!
+ dd 1e16h ; NOT a floating-point number!
+ dd 1e16_h ; NOT a floating-point number!
+ dd $1e16 ; NOT a floating-point number!
+ dd $1e+16 ; NOT a floating-point number!
+ dd 1e16 ; THIS is a floating-point number!
+ dd 1e+16
+ dd 1.e+16
+ dd 1e+1_6
+ dd 1e1_6
+ dd 1.0e16
+ dd 1_0e16 ; This is 1e17, not 1e16!
diff --git a/test/utf.asm b/test/utf.asm
new file mode 100644
index 0000000..4b894f8
--- /dev/null
+++ b/test/utf.asm
@@ -0,0 +1,30 @@
+;Testname=test; Arguments=-fbin -outf.bin; Files=stdout stderr utf.bin
+;Testname=error; Arguments=-fbin -outf.bin -DERROR; Files=stdout stderr utf.bin
+%define u(x) __utf16__(x)
+%define w(x) __utf32__(x)
+
+ db `Test \u306a\U0001abcd\n`
+ dw u(`Test \u306a\U0001abcd\n`)
+ dd w(`Test \u306a\U0001abcd\n`)
+
+ db `\u306a`
+ db `\xe3\x81\xaa`
+
+ dw __utf16__ "Hello, World!"
+
+ nop
+
+ mov ax,u(`a`)
+ mov bx,u(`\u306a`)
+ mov cx,u(`\xe3\x81\xaa`)
+ mov eax,u(`ab`)
+ mov ebx,u(`\U0001abcd`)
+ mov ecx,w(`\U0001abcd`)
+
+%ifdef ERROR
+ dw __utf16__ 33
+ dw __utf16__, 46
+ dw __utf16__("Hello, World!",16)
+ dw __utf16__("Hello, World!",16
+ dw u(`\xff`)
+%endif
diff --git a/test/vmread.asm b/test/vmread.asm
new file mode 100644
index 0000000..551c71a
--- /dev/null
+++ b/test/vmread.asm
@@ -0,0 +1,26 @@
+;Testname=test; Arguments=-fbin -ovmread.bin; Files=stdout stderr vmread.bin
+
+ bits 32
+ vmread dword [0], eax
+ vmwrite eax, dword [0]
+ vmread [0], eax
+ vmwrite eax, [0]
+
+ bits 64
+ vmread qword [0], rax
+ vmwrite rax, qword [0]
+ vmread [0], rax
+ vmwrite rax, [0]
+
+%ifdef ERROR
+ bits 32
+ vmread qword [0], eax
+ vmwrite eax, qword [0]
+
+ bits 64
+ vmread dword [0], eax
+ vmwrite eax, dword [0]
+
+ vmread qword [0], eax
+ vmwrite eax, qword [0]
+%endif \ No newline at end of file
diff --git a/test/weirdpaste.asm b/test/weirdpaste.asm
new file mode 100644
index 0000000..46bfa90
--- /dev/null
+++ b/test/weirdpaste.asm
@@ -0,0 +1,29 @@
+;Testname=preproc; Arguments=-E; Files=stdout stderr
+;Testname=bin; Arguments=-fbin -oweirdpaste.bin; Files=stdout stderr weirdpaste.bin
+
+ %define foo xyzzy
+%define bar 1e+10
+
+%define xyzzy1e 15
+
+%macro dx 2
+%assign xx %1%2
+ dw xx
+%endmacro
+
+ dx foo, bar
+
+%macro df 2
+%assign xy __float32__(%1e+%2)
+ dd xy
+ dd %1e+%2
+%endmacro
+
+ df 1, 36
+ df 33, 20
+ df 0, 2
+ df 1.2, 5
+
+
+%define N 1e%++%+ 5
+ dd N, 1e+5
diff --git a/test/xchg.asm b/test/xchg.asm
new file mode 100644
index 0000000..9c826dd
--- /dev/null
+++ b/test/xchg.asm
@@ -0,0 +1,96 @@
+;Testname=unoptimized; Arguments=-fbin -oxchg.bin -O0; Files=stdout stderr xchg.bin
+;Testname=optimized; Arguments=-fbin -oxchg.bin -Ox; Files=stdout stderr xchg.bin
+
+%macro x 2
+ xchg %1,%2
+ xchg %2,%1
+%endmacro
+
+ bits 16
+
+ x ax,ax
+ x ax,cx
+ x ax,dx
+ x ax,bx
+ x ax,sp
+ x ax,bp
+ x ax,si
+ x ax,di
+ x eax,eax
+ x eax,ecx
+ x eax,edx
+ x eax,ebx
+ x eax,esp
+ x eax,ebp
+ x eax,esi
+ x eax,edi
+
+ bits 32
+
+ x ax,ax
+ x ax,cx
+ x ax,dx
+ x ax,bx
+ x ax,sp
+ x ax,bp
+ x ax,si
+ x ax,di
+ x eax,eax
+ x eax,ecx
+ x eax,edx
+ x eax,ebx
+ x eax,esp
+ x eax,ebp
+ x eax,esi
+ x eax,edi
+
+ bits 64
+
+ x ax,ax
+ x ax,cx
+ x ax,dx
+ x ax,bx
+ x ax,sp
+ x ax,bp
+ x ax,si
+ x ax,di
+ x ax,r8w
+ x ax,r9w
+ x ax,r10w
+ x ax,r11w
+ x ax,r12w
+ x ax,r13w
+ x ax,r14w
+ x ax,r15w
+ x eax,eax
+ x eax,ecx
+ x eax,edx
+ x eax,ebx
+ x eax,esp
+ x eax,ebp
+ x eax,esi
+ x eax,edi
+ x eax,r8d
+ x eax,r9d
+ x eax,r10d
+ x eax,r11d
+ x eax,r12d
+ x eax,r13d
+ x eax,r14d
+ x eax,r15d
+ x rax,rax
+ x rax,rcx
+ x rax,rdx
+ x rax,rbx
+ x rax,rsp
+ x rax,rbp
+ x rax,rsi
+ x rax,rdi
+ x rax,r8
+ x rax,r9
+ x rax,r10
+ x rax,r11
+ x rax,r12
+ x rax,r13
+ x rax,r14
+ x rax,r15
diff --git a/test/xcrypt.asm b/test/xcrypt.asm
new file mode 100644
index 0000000..55a3f5d
--- /dev/null
+++ b/test/xcrypt.asm
@@ -0,0 +1,24 @@
+;Testname=test; Arguments=-fbin -oxcrypt.bin; Files=stdout stderr xcrypt.bin
+; BR 2029829
+
+ bits 32
+
+ rep xstore
+ rep xcryptecb
+ rep xcryptcbc
+ rep xcryptctr
+ rep xcryptcfb
+ rep xcryptofb
+ rep montmul
+ rep xsha1
+ rep xsha256
+
+ xstore
+ xcryptecb
+ xcryptcbc
+ xcryptctr
+ xcryptcfb
+ xcryptofb
+ montmul
+ xsha1
+ xsha256
diff --git a/test/zerobyte.asm b/test/zerobyte.asm
new file mode 100644
index 0000000..c3a0441
--- /dev/null
+++ b/test/zerobyte.asm
@@ -0,0 +1,22 @@
+;Testname=test; Arguments=-fbin -ozerobyte.bin; Files=stdout stderr zerobyte.bin
+ bits 64
+
+ mov eax,bar-foo
+
+foo:
+ add al,r10b
+bar:
+
+ lldt ax
+ lldt r8w
+ ltr [rax]
+ sldt eax
+ sldt r8d
+ str eax
+ str rax
+ str r8d
+ str r8
+ verr ax
+ verr r8w
+ verw ax
+ verw r8w