diff --git a/ATTParser.hs b/ATTParser.hs
index 93d332e20b9771e148d9f88c460574c3716b5f2c..62699ee9f3b4d6bbf1ef8319926479b4260d823f 100644
--- a/ATTParser.hs
+++ b/ATTParser.hs
@@ -28,6 +28,19 @@ data Inst = Ident String
           | Ascii String
           deriving Show
 
+mkLong :: Word32 -> Inst
+mkLong = Long
+mkQuad :: Word64 -> Inst
+mkQuad = Quad
+-- | turn @x@ and @(x)@ into @Ref x@.
+-- The (x) syntax can be found in mips assembly.
+mkRef :: String -> Inst
+mkRef ('(':r) | (')':r') <- reverse r = Ref $ reverse r'
+mkRef r = Ref r
+
+mkAscii :: String -> Inst
+mkAscii = Ascii
+
 type ASM = [(String, Inst)]
 
 isIdent :: Inst -> Bool
@@ -54,21 +67,42 @@ preprocess :: String -> [Inst]
 preprocess [] = []
 preprocess ('\t':attr) = let (h, t) = break isSpace attr
                          in case h:words' (=='\t') t of
-                         (".quad":x:_) | isNumber (w x) -> [Quad $ read (w x)]
-                                       | otherwise      -> [Ref  $ (w x)]
-                         (".xword":x:_)| isNumber (w x) -> [Quad $ read (w x)]
-                                       | otherwise      -> [Ref  $ (w x)]
-                         (".long":x:_) | isNumber (w x) -> [Long $ read (w x)]
-                                       | otherwise      -> [Ref  $ (w x)]
-                         (".space":x:_)| (w x) == "4"   -> [Long 0]
-                                       | (w x) == "8"   -> [Quad 0]
-                         (".ascii":x:_)             -> [Ascii $ read x]
-                         (".asciz":x:_)             -> [Ascii $ read x ++ "\0"]
+                         -- 8 byte values
+                         (".quad":x:_) | isNumber (w x) -> [mkQuad $ read (w x)]
+                                       | otherwise      -> [mkRef  $ (w x)]
+                         (".xword":x:_)| isNumber (w x) -> [mkQuad $ read (w x)]
+                                       | otherwise      -> [mkRef  $ (w x)]
+                         (".8byte":x:_)| isNumber (w x) -> [mkQuad $ read (w x)]
+                                       | otherwise      -> [mkRef  $ (w x)]
+                         ("data8":x:_) | isNumber (w x) -> [mkQuad $ read (w x)]
+                                       | otherwise      -> [mkRef  $ (w x)]
+
+                         -- 4 byte values
+                         (".long":x:_) | isNumber (w x) -> [mkLong $ read (w x)]
+                                       | otherwise      -> [mkRef  $ (w x)]
+                         (".word":x:_) | isNumber (w x) -> [mkLong $ read (w x)]
+                                       | otherwise      -> [mkRef  $ (w x)]
+                         (".4byte":x:_)| isNumber (w x) -> [mkLong $ read (w x)]
+                                       | otherwise      -> [mkRef  $ (w x)]
+
+                         (".space":x:_)| (w x) == "4"   -> [mkLong 0]
+                                       | (w x) == "8"   -> [mkQuad 0]
+                         (".skip":x:_) | (w x) == "4"   -> [mkLong 0]
+                                       | (w x) == "8"   -> [mkQuad 0]
+
+                         (".ascii":x:_)             -> [mkAscii $ read x]
+                         (".asciz":x:_)             -> [mkAscii $ read x ++ "\0"]
+                         -- found on nios, sh4, alpha, mk68k; all without \0.
+                         (".string":x:_)            -> [mkAscii $ read x ++ "\0"]
+                         -- found on hppa
+                         (".stringz":x:_)           -> [mkAscii $ read x ++ "\0"]
+                         -- ia64
+                         ("stringz":x:_)            -> [mkAscii $ read x ++ "\0"]
                          _                          -> []
   where w = head . words
 preprocess ('.':'z':'e':'r':'o':'f':'i':'l':'l':' ':x) = case words' (==',') x of
-      (_seg:_sect:sym:size:_) | size == "4" -> [Ident sym, Long 0]
-                              | size == "8" -> [Ident sym, Quad 0]
+      (_seg:_sect:sym:size:_) | size == "4" -> [Ident sym, mkLong 0]
+                              | size == "8" -> [Ident sym, mkQuad 0]
       _ -> []
 preprocess (c:cs) | not (isSpace c) = [Ident $ takeWhile (/= ':') (c:cs)]
                   | otherwise       = []
diff --git a/Spec.hs b/Spec.hs
index 973e92c91434d655e5224274974264e8e8dfca08..b8391a48a8609db2952fd03de56a6ae2c8b61b52 100644
--- a/Spec.hs
+++ b/Spec.hs
@@ -7,11 +7,25 @@ import Control.Monad (forM_)
 main :: IO ()
 main = hspec $ do
   describe "asm parser" $ do
+    -- 64bit
     forM_ [("x86_64 linux", "test/asm/x86_64-linux.s")
           ,("x86_64 macos", "test/asm/x86_64-mac.s")
           ,("x86_64 mingw", "test/asm/x86_64-mingw32.s")
           ,("aarch64 ios",  "test/asm/aarch64-ios.s")
-          ,("aarch64 linux","test/asm/aarch64.s")]
+          ,("aarch64 linux","test/asm/aarch64.s")
+          ,("sparc64 linux","test/asm/sparc64-linux.s")
+          ,("mips64 linux", "test/asm/mips64-linux.s")
+          ,("powerpc64 linux","test/asm/powerpc64-linux.s")
+          ,("powerpc64le linux","test/asm/powerpc64le-linux.s")
+          ,("hppa linux",   "test/asm/hppa-linux.s")
+          ,("m68k linux",   "test/asm/m68k-linux.s")
+          ,("alpha linux",  "test/asm/alpha-linux.s")
+          ,("ia64 linux",   "test/asm/ia64-linux.s")
+          ,("nios2 linux",  "test/asm/nios2-linux.s")
+          ,("s390 linux",   "test/asm/s390-linux.s")
+          ,("s390x linux",  "test/asm/s390x-linux.s")
+          ,("sh4 linux",    "test/asm/sh4-linux.s")
+          ]
       $ \(d, f) ->do
       context d $ do
         x <- runIO $ parse f
@@ -25,10 +39,14 @@ main = hspec $ do
 
         it "t should be \"Hello World\\\"\\n\\0\"" $ do
           lookupString "t" x `shouldBe` (Just "Hello World\" 12345\0")
-
+    -- 32 bit
     forM_ [("arm ios",      "test/asm/arm-ios.s")
           ,("arm linux",    "test/asm/arm.s")
-          ,("x86 linux",    "test/asm/x86-linux.s")]
+          ,("x86 linux",    "test/asm/x86-linux.s")
+          ,("sparc linux",  "test/asm/sparc-linux.s")
+          ,("mips linux",   "test/asm/mips-linux.s")
+          ,("powerpc linux","test/asm/powerpc-linux.s")
+          ]
       $ \(d, f) ->do
       context d $ do
         x <- runIO $ parse f
diff --git a/test/asm/Makefile b/test/asm/Makefile
index 91d2fcf50326447a42012c9633c31859ca6a23e4..6f6a02c29517e0d57baf5c84fb4fab931cff67c1 100644
--- a/test/asm/Makefile
+++ b/test/asm/Makefile
@@ -2,9 +2,24 @@ all:
 	clang -target arm-linux-gnueabihf -S -c tmp.c -o arm.s
 	clang -target aarch64-linux-gnueabihf -S -c tmp.c -o aarch64.s
 	clang -target arm64-apple-ios -S -c tmp.c -o aarch64-ios.s
-	clang -target armv7-apple-ios -S -c tmp.c -o arm-ios.s 
+	clang -target armv7-apple-ios -S -c tmp.c -o arm-ios.s
 	x86_64-w64-mingw32-gcc -S -c tmp.c -o x86_64-mingw32.s
 	clang -target i386-unknown-linux -S -c tmp.c -o x86-linux.s
 	clang -target x86_64-apple-macos -S -c tmp.c -o x86_64-mac.s
 	clang -target i386-unknown-linux -S -c tmp.c -o x86-linux.s
 	clang -target x86_64-unknown-linux -S -c tmp.c -o x86_64-linux.s
+	clang -target sparc-unknown-linux -S -c tmp.c -o sparc-linux.s
+	clang -target sparc64-unknown-linux -S -c tmp.c -o sparc64-linux.s
+	clang -target mips-unknown-linux -S -c tmp.c -o mips-linux.s
+	clang -target mips64-unknown-linux -S -c tmp.c -o mips64-linux.s
+	clang -target powerpc-unknown-linux -S -c tmp.c -o powerpc-linux.s
+	clang -target powerpc64-unknown-linux -S -c tmp.c -o powerpc64-linux.s
+	clang -target powerpc64le-unknown-linux -S -c tmp.c -o powerpc64le-linux.s
+	hppa-unknown-linux-gnu-gcc -S -c tmp.c -o hppa-linux.s
+	m68k-unknown-linux-gnu-gcc -S -c tmp.c -o m68k-linux.s
+	alpha-unknown-linux-gnu-gcc -S -c tmp.c -o alpha-linux.s
+	ia64-unknown-linux-gnu-gcc -S -c tmp.c -o ia64-linux.s
+	nios2-unknown-linux-gnu-gcc -S -c tmp.c -o nios2-linux.s
+	s390-unknown-linux-gnu-gcc -S -c tmp.c -o s390-linux.s
+	s390x-unknown-linux-gnu-gcc -S -c tmp.c -o s390x-linux.s
+	sh4-unknown-linux-gnu-gcc -S -c tmp.c -o sh4-linux.s
diff --git a/test/asm/alpha-linux.s b/test/asm/alpha-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..75cc42c44acea9f3a9d35ff8a5f737f2ed7ff181
--- /dev/null
+++ b/test/asm/alpha-linux.s
@@ -0,0 +1,64 @@
+	.set noreorder
+	.set volatile
+	.set noat
+	.set nomacro
+	.arch ev4
+	.globl ___hsc2hs_BOM___
+	.section	.sdata,"aws",@progbits
+	.align 3
+	.type	___hsc2hs_BOM___, @object
+	.size	___hsc2hs_BOM___, 8
+___hsc2hs_BOM___:
+	.quad	4294967296
+	.globl x___hsc2hs_sign___
+	.section	.sbss,"aw"
+	.type	x___hsc2hs_sign___, @object
+	.size	x___hsc2hs_sign___, 8
+	.align 3
+x___hsc2hs_sign___:
+	.zero	8
+	.globl x
+	.section	.sdata
+	.align 3
+	.type	x, @object
+	.size	x, 8
+x:
+	.quad	1
+	.globl y___hsc2hs_sign___
+	.section	.sbss,"aw"
+	.type	y___hsc2hs_sign___, @object
+	.size	y___hsc2hs_sign___, 8
+	.align 3
+y___hsc2hs_sign___:
+	.zero	8
+	.globl y
+	.section	.sdata
+	.align 3
+	.type	y, @object
+	.size	y, 8
+y:
+	.quad	-1
+	.globl z___hsc2hs_sign___
+	.align 3
+	.type	z___hsc2hs_sign___, @object
+	.size	z___hsc2hs_sign___, 8
+z___hsc2hs_sign___:
+	.quad	1
+	.globl z
+	.align 3
+	.type	z, @object
+	.size	z, 8
+z:
+	.quad	-1
+	.globl t
+	.section	.rodata
+$LC0:
+	.string	"Hello World\" 12345"
+	.section	.sdata
+	.align 3
+	.type	t, @object
+	.size	t, 8
+t:
+	.quad	$LC0
+	.ident	"GCC: (Gentoo 7.2.0-r1 p1.1) 7.2.0"
+	.section	.note.GNU-stack,"",@progbits
diff --git a/test/asm/hppa-linux.s b/test/asm/hppa-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..1beef3475cb6a13eda7e6acf2a8e529486b20b44
--- /dev/null
+++ b/test/asm/hppa-linux.s
@@ -0,0 +1,67 @@
+	.LEVEL 1.1
+.globl ___hsc2hs_BOM___
+	.data
+	.align 8
+	.type	___hsc2hs_BOM___, @object
+	.size	___hsc2hs_BOM___, 8
+___hsc2hs_BOM___:
+	.word	1
+	.word	0
+.globl x___hsc2hs_sign___
+	.section	.bss
+	.align 8
+	.type	x___hsc2hs_sign___, @object
+	.size	x___hsc2hs_sign___, 8
+	.align 8
+x___hsc2hs_sign___:
+	.block 8
+.globl x
+	.data
+	.align 8
+	.type	x, @object
+	.size	x, 8
+x:
+	.word	0
+	.word	1
+.globl y___hsc2hs_sign___
+	.section	.bss
+	.align 8
+	.type	y___hsc2hs_sign___, @object
+	.size	y___hsc2hs_sign___, 8
+	.align 8
+y___hsc2hs_sign___:
+	.block 8
+.globl y
+	.data
+	.align 8
+	.type	y, @object
+	.size	y, 8
+y:
+	.word	-1
+	.word	-1
+.globl z___hsc2hs_sign___
+	.align 8
+	.type	z___hsc2hs_sign___, @object
+	.size	z___hsc2hs_sign___, 8
+z___hsc2hs_sign___:
+	.word	0
+	.word	1
+.globl z
+	.align 8
+	.type	z, @object
+	.size	z, 8
+z:
+	.word	-1
+	.word	-1
+.globl t
+	.section	.rodata
+	.align 4
+.LC0:
+	.stringz	"Hello World\" 12345"
+	.section	.data.rel.local,"aw",@progbits
+	.align 4
+	.type	t, @object
+	.size	t, 4
+t:
+	.word	.LC0
+	.ident	"GCC: (Gentoo 7.2.0-r1 p1.1) 7.2.0"
diff --git a/test/asm/ia64-linux.s b/test/asm/ia64-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..136894d8af7143d069f6e903fca293a11d810fbc
--- /dev/null
+++ b/test/asm/ia64-linux.s
@@ -0,0 +1,63 @@
+	.file	"tmp.c"
+	.pred.safe_across_calls p1-p5,p16-p63
+	.text
+	.global ___hsc2hs_BOM___#
+	.section	.sdata,"aws",@progbits
+	.align 8
+	.type	___hsc2hs_BOM___#, @object
+	.size	___hsc2hs_BOM___#, 8
+___hsc2hs_BOM___:
+	data8	4294967296
+	.global x___hsc2hs_sign___#
+	.section	.sbss,"aws",@nobits
+	.align 8
+	.type	x___hsc2hs_sign___#, @object
+	.size	x___hsc2hs_sign___#, 8
+x___hsc2hs_sign___:
+	.skip	8
+	.global x#
+	.section	.sdata
+	.align 8
+	.type	x#, @object
+	.size	x#, 8
+x:
+	data8	1
+	.global y___hsc2hs_sign___#
+	.section	.sbss
+	.align 8
+	.type	y___hsc2hs_sign___#, @object
+	.size	y___hsc2hs_sign___#, 8
+y___hsc2hs_sign___:
+	.skip	8
+	.global y#
+	.section	.sdata
+	.align 8
+	.type	y#, @object
+	.size	y#, 8
+y:
+	data8	-1
+	.global z___hsc2hs_sign___#
+	.align 8
+	.type	z___hsc2hs_sign___#, @object
+	.size	z___hsc2hs_sign___#, 8
+z___hsc2hs_sign___:
+	data8	1
+	.global z#
+	.align 8
+	.type	z#, @object
+	.size	z#, 8
+z:
+	data8	-1
+	.global t#
+	.section	.rodata
+	.align 8
+.LC0:
+	stringz	"Hello World\" 12345"
+	.section	.sdata
+	.align 8
+	.type	t#, @object
+	.size	t#, 8
+t:
+	data8	.LC0
+	.ident	"GCC: (Gentoo 7.3.0 p1.0) 7.3.0"
+	.section	.note.GNU-stack,"",@progbits
diff --git a/test/asm/m68k-linux.s b/test/asm/m68k-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..0d0e63f55d6e9ebfb03cacf6723a8734de71f385
--- /dev/null
+++ b/test/asm/m68k-linux.s
@@ -0,0 +1,66 @@
+#NO_APP
+	.file	"tmp.c"
+	.globl	___hsc2hs_BOM___
+	.data
+	.align	2
+	.type	___hsc2hs_BOM___, @object
+	.size	___hsc2hs_BOM___, 8
+___hsc2hs_BOM___:
+	.long	1
+	.long	0
+	.globl	x___hsc2hs_sign___
+	.section	.bss
+	.align	2
+	.type	x___hsc2hs_sign___, @object
+	.size	x___hsc2hs_sign___, 8
+x___hsc2hs_sign___:
+	.zero	8
+	.globl	x
+	.data
+	.align	2
+	.type	x, @object
+	.size	x, 8
+x:
+	.long	0
+	.long	1
+	.globl	y___hsc2hs_sign___
+	.section	.bss
+	.align	2
+	.type	y___hsc2hs_sign___, @object
+	.size	y___hsc2hs_sign___, 8
+y___hsc2hs_sign___:
+	.zero	8
+	.globl	y
+	.data
+	.align	2
+	.type	y, @object
+	.size	y, 8
+y:
+	.long	-1
+	.long	-1
+	.globl	z___hsc2hs_sign___
+	.align	2
+	.type	z___hsc2hs_sign___, @object
+	.size	z___hsc2hs_sign___, 8
+z___hsc2hs_sign___:
+	.long	0
+	.long	1
+	.globl	z
+	.align	2
+	.type	z, @object
+	.size	z, 8
+z:
+	.long	-1
+	.long	-1
+	.globl	t
+	.section	.rodata
+.LC0:
+	.string	"Hello World\" 12345"
+	.section	.data.rel.local,"aw",@progbits
+	.align	2
+	.type	t, @object
+	.size	t, 4
+t:
+	.long	.LC0
+	.ident	"GCC: (Gentoo 7.2.0-r1 p1.1) 7.2.0"
+	.section	.note.GNU-stack,"",@progbits
diff --git a/test/asm/mips-linux.s b/test/asm/mips-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..3f4c004aa0b1e72d92a5396971d15aed6c566376
--- /dev/null
+++ b/test/asm/mips-linux.s
@@ -0,0 +1,78 @@
+	.text
+	.abicalls
+	.option	pic0
+	.section	.mdebug.abi32,"",@progbits
+	.nan	legacy
+	.file	"tmp.c"
+	.type	___hsc2hs_BOM___,@object # @___hsc2hs_BOM___
+	.data
+	.globl	___hsc2hs_BOM___
+	.p2align	3
+___hsc2hs_BOM___:
+	.8byte	4294967296              # 0x100000000
+	.size	___hsc2hs_BOM___, 8
+
+	.type	x___hsc2hs_sign___,@object # @x___hsc2hs_sign___
+	.bss
+	.globl	x___hsc2hs_sign___
+	.p2align	3
+x___hsc2hs_sign___:
+	.8byte	0                       # 0x0
+	.size	x___hsc2hs_sign___, 8
+
+	.type	x,@object               # @x
+	.data
+	.globl	x
+	.p2align	3
+x:
+	.8byte	1                       # 0x1
+	.size	x, 8
+
+	.type	y___hsc2hs_sign___,@object # @y___hsc2hs_sign___
+	.bss
+	.globl	y___hsc2hs_sign___
+	.p2align	3
+y___hsc2hs_sign___:
+	.8byte	0                       # 0x0
+	.size	y___hsc2hs_sign___, 8
+
+	.type	y,@object               # @y
+	.data
+	.globl	y
+	.p2align	3
+y:
+	.8byte	4294967295              # 0xffffffff
+	.size	y, 8
+
+	.type	z___hsc2hs_sign___,@object # @z___hsc2hs_sign___
+	.globl	z___hsc2hs_sign___
+	.p2align	3
+z___hsc2hs_sign___:
+	.8byte	1                       # 0x1
+	.size	z___hsc2hs_sign___, 8
+
+	.type	z,@object               # @z
+	.globl	z
+	.p2align	3
+z:
+	.8byte	-1                      # 0xffffffffffffffff
+	.size	z, 8
+
+	.type	$.str,@object           # @.str
+	.section	.rodata.str1.1,"aMS",@progbits,1
+$.str:
+	.asciz	"Hello World\" 12345"
+	.size	$.str, 19
+
+	.type	t,@object               # @t
+	.data
+	.globl	t
+	.p2align	2
+t:
+	.4byte	($.str)
+	.size	t, 4
+
+
+	.ident	"clang version 5.0.1 (tags/RELEASE_501/final)"
+	.section	".note.GNU-stack","",@progbits
+	.text
diff --git a/test/asm/mips64-linux.s b/test/asm/mips64-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..2cb83fd232ed13dc2bce329b7e4297ee22284880
--- /dev/null
+++ b/test/asm/mips64-linux.s
@@ -0,0 +1,77 @@
+	.text
+	.abicalls
+	.section	.mdebug.abi64,"",@progbits
+	.nan	legacy
+	.file	"tmp.c"
+	.type	___hsc2hs_BOM___,@object
+	.data
+	.globl	___hsc2hs_BOM___
+	.p2align	3
+___hsc2hs_BOM___:
+	.8byte	4294967296
+	.size	___hsc2hs_BOM___, 8
+
+	.type	x___hsc2hs_sign___,@object
+	.bss
+	.globl	x___hsc2hs_sign___
+	.p2align	3
+x___hsc2hs_sign___:
+	.8byte	0
+	.size	x___hsc2hs_sign___, 8
+
+	.type	x,@object
+	.data
+	.globl	x
+	.p2align	3
+x:
+	.8byte	1
+	.size	x, 8
+
+	.type	y___hsc2hs_sign___,@object
+	.bss
+	.globl	y___hsc2hs_sign___
+	.p2align	3
+y___hsc2hs_sign___:
+	.8byte	0
+	.size	y___hsc2hs_sign___, 8
+
+	.type	y,@object
+	.data
+	.globl	y
+	.p2align	3
+y:
+	.8byte	-1
+	.size	y, 8
+
+	.type	z___hsc2hs_sign___,@object
+	.globl	z___hsc2hs_sign___
+	.p2align	3
+z___hsc2hs_sign___:
+	.8byte	1
+	.size	z___hsc2hs_sign___, 8
+
+	.type	z,@object
+	.globl	z
+	.p2align	3
+z:
+	.8byte	-1
+	.size	z, 8
+
+	.type	.L.str,@object
+	.section	.rodata.str1.1,"aMS",@progbits,1
+.L.str:
+	.asciz	"Hello World\" 12345"
+	.size	.L.str, 19
+
+	.type	t,@object
+	.data
+	.globl	t
+	.p2align	3
+t:
+	.8byte	.L.str
+	.size	t, 8
+
+
+	.ident	"clang version 5.0.1 (tags/RELEASE_501/final)"
+	.section	".note.GNU-stack","",@progbits
+	.text
diff --git a/test/asm/nios2-linux.s b/test/asm/nios2-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..ead684f373a50751638234f16423d8773f81de39
--- /dev/null
+++ b/test/asm/nios2-linux.s
@@ -0,0 +1,65 @@
+	.file	"tmp.c"
+	.global	___hsc2hs_BOM___
+	.section	.sdata,"aws",@progbits
+	.align	2
+	.type	___hsc2hs_BOM___, @object
+	.size	___hsc2hs_BOM___, 8
+___hsc2hs_BOM___:
+	.long	0
+	.long	1
+	.global	x___hsc2hs_sign___
+	.section	.sbss,"aws",@nobits
+	.align	2
+	.type	x___hsc2hs_sign___, @object
+	.size	x___hsc2hs_sign___, 8
+x___hsc2hs_sign___:
+	.zero	8
+	.global	x
+	.section	.sdata
+	.align	2
+	.type	x, @object
+	.size	x, 8
+x:
+	.long	1
+	.long	0
+	.global	y___hsc2hs_sign___
+	.section	.sbss
+	.align	2
+	.type	y___hsc2hs_sign___, @object
+	.size	y___hsc2hs_sign___, 8
+y___hsc2hs_sign___:
+	.zero	8
+	.global	y
+	.section	.sdata
+	.align	2
+	.type	y, @object
+	.size	y, 8
+y:
+	.long	-1
+	.long	-1
+	.global	z___hsc2hs_sign___
+	.align	2
+	.type	z___hsc2hs_sign___, @object
+	.size	z___hsc2hs_sign___, 8
+z___hsc2hs_sign___:
+	.long	1
+	.long	0
+	.global	z
+	.align	2
+	.type	z, @object
+	.size	z, 8
+z:
+	.long	-1
+	.long	-1
+	.global	t
+	.section	.rodata
+	.align	2
+.LC0:
+	.string	"Hello World\" 12345"
+	.section	.sdata
+	.align	2
+	.type	t, @object
+	.size	t, 4
+t:
+	.long	.LC0
+	.ident	"GCC: (Gentoo 7.2.0-r1 p1.1) 7.2.0"
diff --git a/test/asm/powerpc-linux.s b/test/asm/powerpc-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..2b62f9b0b1d14b081489174930c5de6b84f247bb
--- /dev/null
+++ b/test/asm/powerpc-linux.s
@@ -0,0 +1,80 @@
+	.text
+	.file	"tmp.c"
+	.type	___hsc2hs_BOM___,@object # @___hsc2hs_BOM___
+	.data
+	.globl	___hsc2hs_BOM___
+	.p2align	3
+___hsc2hs_BOM___:
+	.long	1                       # 0x100000000
+	.long	0
+	.size	___hsc2hs_BOM___, 8
+
+	.type	x___hsc2hs_sign___,@object # @x___hsc2hs_sign___
+	.section	.bss,"aw",@nobits
+	.globl	x___hsc2hs_sign___
+	.p2align	3
+x___hsc2hs_sign___:
+	.long	0                       # 0x0
+	.long	0
+	.size	x___hsc2hs_sign___, 8
+
+	.type	x,@object               # @x
+	.data
+	.globl	x
+	.p2align	3
+x:
+	.long	0                       # 0x1
+	.long	1
+	.size	x, 8
+
+	.type	y___hsc2hs_sign___,@object # @y___hsc2hs_sign___
+	.section	.bss,"aw",@nobits
+	.globl	y___hsc2hs_sign___
+	.p2align	3
+y___hsc2hs_sign___:
+	.long	0                       # 0x0
+	.long	0
+	.size	y___hsc2hs_sign___, 8
+
+	.type	y,@object               # @y
+	.data
+	.globl	y
+	.p2align	3
+y:
+	.long	0                       # 0xffffffff
+	.long	4294967295
+	.size	y, 8
+
+	.type	z___hsc2hs_sign___,@object # @z___hsc2hs_sign___
+	.globl	z___hsc2hs_sign___
+	.p2align	3
+z___hsc2hs_sign___:
+	.long	0                       # 0x1
+	.long	1
+	.size	z___hsc2hs_sign___, 8
+
+	.type	z,@object               # @z
+	.globl	z
+	.p2align	3
+z:
+	.long	4294967295              # 0xffffffffffffffff
+	.long	4294967295
+	.size	z, 8
+
+	.type	.L.str,@object          # @.str
+	.section	.rodata.str1.1,"aMS",@progbits,1
+.L.str:
+	.asciz	"Hello World\" 12345"
+	.size	.L.str, 19
+
+	.type	t,@object               # @t
+	.data
+	.globl	t
+	.p2align	2
+t:
+	.long	.L.str
+	.size	t, 4
+
+
+	.ident	"clang version 5.0.1 (tags/RELEASE_501/final)"
+	.section	".note.GNU-stack","",@progbits
diff --git a/test/asm/powerpc64-linux.s b/test/asm/powerpc64-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..4fc9e3260ac6ca23610c4bc7312fda09db2dc185
--- /dev/null
+++ b/test/asm/powerpc64-linux.s
@@ -0,0 +1,73 @@
+	.text
+	.file	"tmp.c"
+	.type	___hsc2hs_BOM___,@object # @___hsc2hs_BOM___
+	.data
+	.globl	___hsc2hs_BOM___
+	.p2align	3
+___hsc2hs_BOM___:
+	.quad	4294967296              # 0x100000000
+	.size	___hsc2hs_BOM___, 8
+
+	.type	x___hsc2hs_sign___,@object # @x___hsc2hs_sign___
+	.section	.bss,"aw",@nobits
+	.globl	x___hsc2hs_sign___
+	.p2align	3
+x___hsc2hs_sign___:
+	.quad	0                       # 0x0
+	.size	x___hsc2hs_sign___, 8
+
+	.type	x,@object               # @x
+	.data
+	.globl	x
+	.p2align	3
+x:
+	.quad	1                       # 0x1
+	.size	x, 8
+
+	.type	y___hsc2hs_sign___,@object # @y___hsc2hs_sign___
+	.section	.bss,"aw",@nobits
+	.globl	y___hsc2hs_sign___
+	.p2align	3
+y___hsc2hs_sign___:
+	.quad	0                       # 0x0
+	.size	y___hsc2hs_sign___, 8
+
+	.type	y,@object               # @y
+	.data
+	.globl	y
+	.p2align	3
+y:
+	.quad	-1                      # 0xffffffffffffffff
+	.size	y, 8
+
+	.type	z___hsc2hs_sign___,@object # @z___hsc2hs_sign___
+	.globl	z___hsc2hs_sign___
+	.p2align	3
+z___hsc2hs_sign___:
+	.quad	1                       # 0x1
+	.size	z___hsc2hs_sign___, 8
+
+	.type	z,@object               # @z
+	.globl	z
+	.p2align	3
+z:
+	.quad	-1                      # 0xffffffffffffffff
+	.size	z, 8
+
+	.type	.L.str,@object          # @.str
+	.section	.rodata.str1.1,"aMS",@progbits,1
+.L.str:
+	.asciz	"Hello World\" 12345"
+	.size	.L.str, 19
+
+	.type	t,@object               # @t
+	.data
+	.globl	t
+	.p2align	3
+t:
+	.quad	.L.str
+	.size	t, 8
+
+
+	.ident	"clang version 5.0.1 (tags/RELEASE_501/final)"
+	.section	".note.GNU-stack","",@progbits
diff --git a/test/asm/powerpc64le-linux.s b/test/asm/powerpc64le-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..1584514e271607ccf2506aa1d22e82307f1272aa
--- /dev/null
+++ b/test/asm/powerpc64le-linux.s
@@ -0,0 +1,74 @@
+	.text
+	.abiversion 2
+	.file	"tmp.c"
+	.type	___hsc2hs_BOM___,@object # @___hsc2hs_BOM___
+	.data
+	.globl	___hsc2hs_BOM___
+	.p2align	3
+___hsc2hs_BOM___:
+	.quad	4294967296              # 0x100000000
+	.size	___hsc2hs_BOM___, 8
+
+	.type	x___hsc2hs_sign___,@object # @x___hsc2hs_sign___
+	.section	.bss,"aw",@nobits
+	.globl	x___hsc2hs_sign___
+	.p2align	3
+x___hsc2hs_sign___:
+	.quad	0                       # 0x0
+	.size	x___hsc2hs_sign___, 8
+
+	.type	x,@object               # @x
+	.data
+	.globl	x
+	.p2align	3
+x:
+	.quad	1                       # 0x1
+	.size	x, 8
+
+	.type	y___hsc2hs_sign___,@object # @y___hsc2hs_sign___
+	.section	.bss,"aw",@nobits
+	.globl	y___hsc2hs_sign___
+	.p2align	3
+y___hsc2hs_sign___:
+	.quad	0                       # 0x0
+	.size	y___hsc2hs_sign___, 8
+
+	.type	y,@object               # @y
+	.data
+	.globl	y
+	.p2align	3
+y:
+	.quad	-1                      # 0xffffffffffffffff
+	.size	y, 8
+
+	.type	z___hsc2hs_sign___,@object # @z___hsc2hs_sign___
+	.globl	z___hsc2hs_sign___
+	.p2align	3
+z___hsc2hs_sign___:
+	.quad	1                       # 0x1
+	.size	z___hsc2hs_sign___, 8
+
+	.type	z,@object               # @z
+	.globl	z
+	.p2align	3
+z:
+	.quad	-1                      # 0xffffffffffffffff
+	.size	z, 8
+
+	.type	.L.str,@object          # @.str
+	.section	.rodata.str1.1,"aMS",@progbits,1
+.L.str:
+	.asciz	"Hello World\" 12345"
+	.size	.L.str, 19
+
+	.type	t,@object               # @t
+	.data
+	.globl	t
+	.p2align	3
+t:
+	.quad	.L.str
+	.size	t, 8
+
+
+	.ident	"clang version 5.0.1 (tags/RELEASE_501/final)"
+	.section	".note.GNU-stack","",@progbits
diff --git a/test/asm/s390-linux.s b/test/asm/s390-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..b227a6384d1734bb9701207314b1d64e9074cee7
--- /dev/null
+++ b/test/asm/s390-linux.s
@@ -0,0 +1,68 @@
+	.file	"tmp.c"
+	.machinemode esa
+	.machine "z900"
+.globl ___hsc2hs_BOM___
+.data
+	.align	8
+	.type	___hsc2hs_BOM___, @object
+	.size	___hsc2hs_BOM___, 8
+___hsc2hs_BOM___:
+	.long	1
+	.long	0
+.globl x___hsc2hs_sign___
+.bss
+	.align	8
+	.type	x___hsc2hs_sign___, @object
+	.size	x___hsc2hs_sign___, 8
+x___hsc2hs_sign___:
+	.zero	8
+.globl x
+.data
+	.align	8
+	.type	x, @object
+	.size	x, 8
+x:
+	.long	0
+	.long	1
+.globl y___hsc2hs_sign___
+.bss
+	.align	8
+	.type	y___hsc2hs_sign___, @object
+	.size	y___hsc2hs_sign___, 8
+y___hsc2hs_sign___:
+	.zero	8
+.globl y
+.data
+	.align	8
+	.type	y, @object
+	.size	y, 8
+y:
+	.long	-1
+	.long	-1
+.globl z___hsc2hs_sign___
+	.align	8
+	.type	z___hsc2hs_sign___, @object
+	.size	z___hsc2hs_sign___, 8
+z___hsc2hs_sign___:
+	.long	0
+	.long	1
+.globl z
+	.align	8
+	.type	z, @object
+	.size	z, 8
+z:
+	.long	-1
+	.long	-1
+.globl t
+	.section	.rodata
+	.align	2
+.LC0:
+	.string	"Hello World\" 12345"
+	.section	.data.rel.local,"aw",@progbits
+	.align	4
+	.type	t, @object
+	.size	t, 4
+t:
+	.long	.LC0
+	.ident	"GCC: (Gentoo 7.2.0-r1 p1.1) 7.2.0"
+	.section	.note.GNU-stack,"",@progbits
diff --git a/test/asm/s390x-linux.s b/test/asm/s390x-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..76525f833cc4176564c05c0bf8439fde9f257be4
--- /dev/null
+++ b/test/asm/s390x-linux.s
@@ -0,0 +1,63 @@
+	.file	"tmp.c"
+	.machinemode zarch
+	.machine "z900"
+.globl ___hsc2hs_BOM___
+.data
+	.align	8
+	.type	___hsc2hs_BOM___, @object
+	.size	___hsc2hs_BOM___, 8
+___hsc2hs_BOM___:
+	.quad	4294967296
+.globl x___hsc2hs_sign___
+.bss
+	.align	8
+	.type	x___hsc2hs_sign___, @object
+	.size	x___hsc2hs_sign___, 8
+x___hsc2hs_sign___:
+	.zero	8
+.globl x
+.data
+	.align	8
+	.type	x, @object
+	.size	x, 8
+x:
+	.quad	1
+.globl y___hsc2hs_sign___
+.bss
+	.align	8
+	.type	y___hsc2hs_sign___, @object
+	.size	y___hsc2hs_sign___, 8
+y___hsc2hs_sign___:
+	.zero	8
+.globl y
+.data
+	.align	8
+	.type	y, @object
+	.size	y, 8
+y:
+	.quad	-1
+.globl z___hsc2hs_sign___
+	.align	8
+	.type	z___hsc2hs_sign___, @object
+	.size	z___hsc2hs_sign___, 8
+z___hsc2hs_sign___:
+	.quad	1
+.globl z
+	.align	8
+	.type	z, @object
+	.size	z, 8
+z:
+	.quad	-1
+.globl t
+	.section	.rodata
+	.align	2
+.LC0:
+	.string	"Hello World\" 12345"
+	.section	.data.rel.local,"aw",@progbits
+	.align	8
+	.type	t, @object
+	.size	t, 8
+t:
+	.quad	.LC0
+	.ident	"GCC: (Gentoo 7.2.0-r1 p1.1) 7.2.0"
+	.section	.note.GNU-stack,"",@progbits
diff --git a/test/asm/sh4-linux.s b/test/asm/sh4-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..c3b11d7104d138981df5a0be78b6ffe6dd0aa164
--- /dev/null
+++ b/test/asm/sh4-linux.s
@@ -0,0 +1,68 @@
+	.file	"tmp.c"
+	.text
+	.little
+	.global	___hsc2hs_BOM___
+	.data
+	.align 2
+	.type	___hsc2hs_BOM___, @object
+	.size	___hsc2hs_BOM___, 8
+___hsc2hs_BOM___:
+	.long	0
+	.long	1
+	.global	x___hsc2hs_sign___
+	.section	.bss
+	.align 2
+	.type	x___hsc2hs_sign___, @object
+	.size	x___hsc2hs_sign___, 8
+x___hsc2hs_sign___:
+	.zero	8
+	.global	x
+	.data
+	.align 2
+	.type	x, @object
+	.size	x, 8
+x:
+	.long	1
+	.long	0
+	.global	y___hsc2hs_sign___
+	.section	.bss
+	.align 2
+	.type	y___hsc2hs_sign___, @object
+	.size	y___hsc2hs_sign___, 8
+y___hsc2hs_sign___:
+	.zero	8
+	.global	y
+	.data
+	.align 2
+	.type	y, @object
+	.size	y, 8
+y:
+	.long	-1
+	.long	-1
+	.global	z___hsc2hs_sign___
+	.align 2
+	.type	z___hsc2hs_sign___, @object
+	.size	z___hsc2hs_sign___, 8
+z___hsc2hs_sign___:
+	.long	1
+	.long	0
+	.global	z
+	.align 2
+	.type	z, @object
+	.size	z, 8
+z:
+	.long	-1
+	.long	-1
+	.global	t
+	.section	.rodata
+	.align 2
+.LC0:
+	.string	"Hello World\" 12345"
+	.section	.data.rel.local,"aw",@progbits
+	.align 2
+	.type	t, @object
+	.size	t, 4
+t:
+	.long	.LC0
+	.ident	"GCC: (Gentoo 7.2.0-r1 p1.1) 7.2.0"
+	.section	.note.GNU-stack,"",@progbits
diff --git a/test/asm/sparc-linux.s b/test/asm/sparc-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..13e620535a35eaaad9e90aec477441962ffc533a
--- /dev/null
+++ b/test/asm/sparc-linux.s
@@ -0,0 +1,80 @@
+	.text
+	.file	"tmp.c"
+	.type	___hsc2hs_BOM___,@object
+	.data
+	.globl	___hsc2hs_BOM___
+	.p2align	3
+___hsc2hs_BOM___:
+	.word	1
+	.word	0
+	.size	___hsc2hs_BOM___, 8
+
+	.type	x___hsc2hs_sign___,@object
+	.section	.bss,#alloc,#write
+	.globl	x___hsc2hs_sign___
+	.p2align	3
+x___hsc2hs_sign___:
+	.word	0
+	.word	0
+	.size	x___hsc2hs_sign___, 8
+
+	.type	x,@object
+	.data
+	.globl	x
+	.p2align	3
+x:
+	.word	0
+	.word	1
+	.size	x, 8
+
+	.type	y___hsc2hs_sign___,@object
+	.section	.bss,#alloc,#write
+	.globl	y___hsc2hs_sign___
+	.p2align	3
+y___hsc2hs_sign___:
+	.word	0
+	.word	0
+	.size	y___hsc2hs_sign___, 8
+
+	.type	y,@object
+	.data
+	.globl	y
+	.p2align	3
+y:
+	.word	0
+	.word	4294967295
+	.size	y, 8
+
+	.type	z___hsc2hs_sign___,@object
+	.globl	z___hsc2hs_sign___
+	.p2align	3
+z___hsc2hs_sign___:
+	.word	0
+	.word	1
+	.size	z___hsc2hs_sign___, 8
+
+	.type	z,@object
+	.globl	z
+	.p2align	3
+z:
+	.word	4294967295
+	.word	4294967295
+	.size	z, 8
+
+	.type	.L.str,@object
+	.section	.rodata.str1.1,"aMS",@progbits,1
+.L.str:
+	.asciz	"Hello World\" 12345"
+	.size	.L.str, 19
+
+	.type	t,@object
+	.data
+	.globl	t
+	.p2align	2
+t:
+	.word	.L.str
+	.size	t, 4
+
+
+	.ident	"clang version 5.0.1 (tags/RELEASE_501/final)"
+	.section	".note.GNU-stack"
diff --git a/test/asm/sparc64-linux.s b/test/asm/sparc64-linux.s
new file mode 100644
index 0000000000000000000000000000000000000000..5f1a2f7a5612d065011dc60bc00a03dbf3173422
--- /dev/null
+++ b/test/asm/sparc64-linux.s
@@ -0,0 +1,73 @@
+	.text
+	.file	"tmp.c"
+	.type	___hsc2hs_BOM___,@object
+	.data
+	.globl	___hsc2hs_BOM___
+	.p2align	3
+___hsc2hs_BOM___:
+	.xword	4294967296
+	.size	___hsc2hs_BOM___, 8
+
+	.type	x___hsc2hs_sign___,@object
+	.section	.bss,#alloc,#write
+	.globl	x___hsc2hs_sign___
+	.p2align	3
+x___hsc2hs_sign___:
+	.xword	0
+	.size	x___hsc2hs_sign___, 8
+
+	.type	x,@object
+	.data
+	.globl	x
+	.p2align	3
+x:
+	.xword	1
+	.size	x, 8
+
+	.type	y___hsc2hs_sign___,@object
+	.section	.bss,#alloc,#write
+	.globl	y___hsc2hs_sign___
+	.p2align	3
+y___hsc2hs_sign___:
+	.xword	0
+	.size	y___hsc2hs_sign___, 8
+
+	.type	y,@object
+	.data
+	.globl	y
+	.p2align	3
+y:
+	.xword	-1
+	.size	y, 8
+
+	.type	z___hsc2hs_sign___,@object
+	.globl	z___hsc2hs_sign___
+	.p2align	3
+z___hsc2hs_sign___:
+	.xword	1
+	.size	z___hsc2hs_sign___, 8
+
+	.type	z,@object
+	.globl	z
+	.p2align	3
+z:
+	.xword	-1
+	.size	z, 8
+
+	.type	.L.str,@object
+	.section	.rodata.str1.1,"aMS",@progbits,1
+.L.str:
+	.asciz	"Hello World\" 12345"
+	.size	.L.str, 19
+
+	.type	t,@object
+	.data
+	.globl	t
+	.p2align	3
+t:
+	.xword	.L.str
+	.size	t, 8
+
+
+	.ident	"clang version 5.0.1 (tags/RELEASE_501/final)"
+	.section	".note.GNU-stack"