3a_asm: .ifill magic :)
authorBernhard Urban <lewurm@gmail.com>
Tue, 21 Dec 2010 16:59:07 +0000 (17:59 +0100)
committerBernhard Urban <lewurm@gmail.com>
Tue, 21 Dec 2010 16:59:07 +0000 (17:59 +0100)
3_test/deepjit.s
3a_asm/Main.hs

index a73e080d90e9ca5d9beb5a180205b48ae51e90cd..ae87d687a9732efd0ceec2ce590cc09add53abad 100644 (file)
@@ -29,86 +29,86 @@ instrtable:
 .fill 42, 0
 
 prog_eof:
-.fill 1, 0xE701FFFC;ldw r0, 0-4(r3)
-.fill 1, 0xEB00000A;ret+
+.ifill ldw r0, 0-4(r3);0xE701FFFC
+.ifill ret+
 
 prog_mul:
-.fill 1, 0xE1998020;subi r3, r3, 4
-.fill 1, 0xe7318000;ldw r6, 0(r3)
-.fill 1, 0xe739fffc;ldw r7, 0-4(r3)
-.fill 1, 0xed400004;ldis r8, 0
-.fill 1, 0xe1038000;mov r0, r7
-.fill 1, 0xe2800008;andx r0, 1
-.fill 1, 0x00443001;adddnz r8, r8, r6
-.fill 1, 0x01bb8008;subinz r7, r7, 1
-.fill 1, 0x113b8000;addizs r7, r7, 0
+.ifill subi r3, r3, 4;0xE1998020
+.ifill ldw r6, 0(r3);0xe7318000
+.ifill ldw r7, 0-4(r3);0xe739fffc
+.ifill ldis r8, 0;0xed400004
+.ifill mov r0, r7;0xe1038000
+.ifill andx r0, 1;0xe2800008
+.ifill adddnz r8, r8, r6;0x00443001
+.ifill subinz r7, r7, 1;0x01bb8008
+.ifill addizs r7, r7, 0;0x113b8000
 ;loop:
-.fill 1, 0x00443001;adddnz r8, r8, r6
-.fill 1, 0x00443001;adddnz r8, r8, r6
-.fill 1, 0xe1bb8010;subi r7, r7, 2
-.fill 1, 0x0b7ffe83;brnz+ loop
-.fill 1, 0xe7c1fffc;stw r8, 0-4(r3)
+.ifill adddnz r8, r8, r6;0x00443001
+.ifill adddnz r8, r8, r6;0x00443001
+.ifill subi r7, r7, 2;0xe1bb8010
+.fill 0x0b7ffe83;brnz+ loop
+.ifill stw r8, 0-4(r3);0xe7c1fffc
 
 prog_consts:
-.fill 1, 0xed300004;ldis r6, CONST
-.fill 1, 0xe7b18000;stw r6, 0(r3)
-.fill 1, 0xe1198020;addi r3, r3, 4
+.fill 0xed300004;ldis r6, CONST
+.ifill stw r6, 0(r3);0xe7b18000
+.ifill addi r3, r3, 4;0xe1198020
 
 prog_add:
-.fill 1, 0xe1998020;subi r3, r3, 4
-.fill 1, 0xe7318000;ldw r6, 0(r3)
-.fill 1, 0xe739fffc;ldw r7, 0-4(r3)
-.fill 1, 0xe03bb000;add r7, r7, r6
-.fill 1, 0xe7b9fffc;stw r7, 0-4(r3)
+.ifill subi r3, r3, 4;0xe1998020
+.ifill ldw r6, 0(r3);0xe7318000
+.ifill ldw r7, 0-4(r3);0xe739fffc
+.ifill add r7, r7, r6;0xe03bb000
+.ifill stw r7, 0-4(r3);0xe7b9fffc
 
 prog_sub:
-.fill 1, 0xe1998020;subi r3, r3, 4
-.fill 1, 0xe7318000;ldw r6, 0(r3)
-.fill 1, 0xe739fffc;ldw r7, 0-4(r3)
-.fill 1, 0xe0bbb000;sub r7, r7, r6
-.fill 1, 0xe7b9fffc;stw r7, 0-4(r3)
+.ifill subi r3, r3, 4;0xe1998020
+.ifill ldw r6, 0(r3);0xe7318000
+.ifill ldw r7, 0-4(r3);0xe739fffc
+.ifill sub r7, r7, r6;0xe0bbb000
+.ifill stw r7, 0-4(r3);0xe7b9fffc
 
 prog_lessthan:
-.fill 1, 0xe1998020;subi r3, r3, 4
-.fill 1, 0xe7318000;ldw r6, 0(r3)
-.fill 1, 0xe739fffc;ldw r7, 0-4(r3)
-.fill 1, 0xed400004;ldis r8, 0
-.fill 1, 0xec3b0000;cmp r7, r6
-.fill 1, 0xbd4007fc;ldislt r8, 0xFF
-.fill 1, 0xe7c1fffc;stw r8, 0-4(r3)
+.ifill subi r3, r3, 4;0xe1998020
+.ifill ldw r6, 0(r3);0xe7318000
+.ifill ldw r7, 0-4(r3);0xe739fffc
+.ifill ldis r8, 0;0xed400004
+.ifill cmp r7, r6;0xec3b0000
+.ifill ldislt r8, 0xFF;0xbd4007fc
+.ifill stw r8, 0-4(r3);0xe7c1fffc
 
 prog_dup:
-.fill 1, 0xe731fffc;ldw r6, 0-4(r3)
-.fill 1, 0xe7b18000;stw r6, 0(r3)
-.fill 1, 0xe1198020;addi r3, r3, 4
+.ifill ldw r6, 0-4(r3);0xe731fffc
+.ifill stw r6, 0(r3);0xe7b18000
+.ifill addi r3, r3, 4;0xe1198020
 
 prog_jmp:
-.fill 1, 0xe1998020;subi r3, r3, 4
-.fill 1, 0xe7318000;ldw r6, 0(r3)
-.fill 1, 0xecb00000;cmpi r6,0
+.ifill subi r3, r3, 4;0xe1998020
+.ifill ldw r6, 0(r3);0xe7318000
+.ifill cmpi r6,0;0xecb00000
 ;static calced
 .fill 1, 0xbb000103;breq- vm_next
-.fill 1, 0xeb000003;br+ #CONST
+.fill 1, 0xeb000003;br+ CONST
 
 prog_imm:
 .fill 1, 0xed400000;ldil r6, CONST
 .fill 1, 0xed400002;ldih r6, CONST
-.fill 1, 0xe7b18000;stw r6, 0(r3)
-.fill 1, 0xe1198020;addi r3, r3, 4
+.ifill stw r6, 0(r3);0xe7b18000
+.ifill addi r3, r3, 4;0xe1198020
 
 prog_pop:
-.fill 1, 0xe1998020;subi r3, r3, 4
+.ifill subi r3, r3, 4;0xe1998020
 
 prog_xch:
-.fill 1, 0xe731fffc;ldw r6, 0-4(r3)
-.fill 1, 0xe739fff8;ldw r7, 0-8(r3)
-.fill 1, 0xe7b1fff8;stw r6, 0-8(r3)
-.fill 1, 0xe7b9fffc;stw r7, 0-4(r3)
+.ifill ldw r6, 0-4(r3);0xe731fffc
+.ifill ldw r7, 0-8(r3);0xe739fff8
+.ifill stw r6, 0-8(r3);0xe7b1fff8
+.ifill stw r7, 0-4(r3);0xe7b9fffc
 
 prog_not:
-.fill 1, 0xe731fffc;ldw r6, 0-4(r3)
-.fill 1, 0xe4b7fffa;not r6
-.fill 1, 0xe7b1fffc;stw r6, 0-4(r3)
+.ifill ldw r6, 0-4(r3);0xe731fffc
+.ifill not r6;0xe4b7fffa
+.ifill stw r6, 0-4(r3);0xe7b1fffc
 
 .text
 main:
index 8160012fd09585ae1191b745804bcb996c57e596..08522c658d34fabbc0d97ac1cb7d2744d543418c 100644 (file)
@@ -140,7 +140,7 @@ testDTF input =
 parseDTFLine :: [DictElem] -> Parser DTF
 parseDTFLine dict = foldl1 (<|>) (fmap (\x -> try (x dict)) lineFormats) <* char '\n'
 
-lineFormats = [lf_define, lf_sdata, lf_stext, lf_org, lf_data, lf_comment, lf_toparse, lf_label]
+lineFormats = [lf_define, lf_sdata, lf_stext, lf_org, lf_data, lf_ifill, lf_comment, lf_toparse, lf_label]
 
 -- helper
 parseIdent :: Parser String
@@ -182,6 +182,17 @@ lf_data d = do
        comment <- try(parseComment) <|> parseMySpaces
        return $ DTF_Fill r val (fill ++ (if repeat == "1" then "" else repeat) ++ code) l comment
 
+lf_ifill d = do
+       l <- try (parseLabel) <|> string ""
+       skipMany space
+       fill <- string ".ifill "
+       code <- many1 $ noneOf "\n;"
+       let val = case parse (instruction (0,d)) "" (code++"\n") of
+               Right v -> v
+               Left err -> error $ show err
+       comment <- try(parseComment) <|> parseMySpaces
+       return $ DTF_Fill 1 val (fill ++ code) l comment
+
 lf_comment _ = do
        comment <- parseComment
        return $ DTF_Comment comment