Pt 162805963 fate opcodes (#6)
* First iteration of assembler. * Stand alone assembler.
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
;; CONTRACT arith
|
||||
|
||||
FUNCTION add (integer, integer) : integer
|
||||
ADD a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION sub (integer, integer) : integer
|
||||
SUB a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION mul (integer, integer) : integer
|
||||
MUL a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION div (integer, integer) : integer
|
||||
DIV a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION mod (integer, integer) : integer
|
||||
MOD a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION pow (integer, integer) : integer
|
||||
POW a arg0 arg1
|
||||
RETURN
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
;; CONTRACT bool
|
||||
|
||||
FUNCTION and(boolean, boolean) : boolean
|
||||
AND a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION or(boolean, boolean) : boolean
|
||||
OR a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION not(boolean) : boolean
|
||||
NOT a arg0
|
||||
RETURN
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
;; CONTRACT comp
|
||||
|
||||
FUNCTION lt(integer, integer) : boolean
|
||||
LT a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION gt(integer, integer) : boolean
|
||||
GT a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION egt(integer, integer) : boolean
|
||||
EGT a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION elt(integer, integer) : boolean
|
||||
ELT a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION eq(integer, integer) : boolean
|
||||
EQ a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION neq(integer, integer) : boolean
|
||||
NEQ a arg0 arg1
|
||||
RETURN
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
;; CONTRACT: Identity
|
||||
FUNCTION id(integer) -> integer
|
||||
RETURN
|
||||
|
||||
;; Test the code from the shell
|
||||
;; _build/default/rel/aessembler/bin/aessembler console
|
||||
|
||||
;; aeb_aefa:file("../../../../test/asm_code/identity.fate", []).
|
||||
@@ -0,0 +1,9 @@
|
||||
;; CONTRACT jumpif
|
||||
FUNCTION skip(integer, integer) : integer
|
||||
PUSH arg1
|
||||
PUSH 0
|
||||
EQ a a arg0
|
||||
JUMPIF a 2
|
||||
INC
|
||||
JUMP 2
|
||||
RETURN
|
||||
@@ -0,0 +1,34 @@
|
||||
;; CONTRACT map
|
||||
FUNCTION make_empty_map():{map, integer, boolean}
|
||||
MAP_EMPTY a
|
||||
RETURN
|
||||
|
||||
FUNCTION map_update({map, integer, boolean}, integer, boolean):{map, integer, boolean}
|
||||
MAP_UPDATE a arg0 arg1 arg2
|
||||
RETURN
|
||||
|
||||
FUNCTION map_lookup({map, integer, boolean}, integer):boolean
|
||||
MAP_LOOKUP a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION map_lookup_default({map, integer, boolean}, integer): boolean
|
||||
MAP_LOOKUPD a arg0 arg1 false
|
||||
RETURN
|
||||
|
||||
FUNCTION map_member({map, integer, boolean}, integer):boolean
|
||||
MAP_MEMBER a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION map_delete({map, integer, boolean}, integer):{map, integer, boolean}
|
||||
MAP_DELETE a arg0 arg1
|
||||
RETURN
|
||||
|
||||
|
||||
FUNCTION map_member({map, integer, boolean}, integer) : boolean
|
||||
MAP_MEMBER a arg0 arg1
|
||||
RETURN
|
||||
|
||||
FUNCTION map_from_list({list, {tuple, [integer, boolean]}}) : {map, integer, boolean}
|
||||
MAP_FROM_LIST a arg0
|
||||
RETURN
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
;; CONTRACT memory
|
||||
FUNCTION call(integer):integer
|
||||
STORE var1 arg0
|
||||
PUSH 0
|
||||
CALL write
|
||||
PUSH var1
|
||||
RETURN
|
||||
|
||||
FUNCTION write(integer):integer
|
||||
STORE var1 arg0
|
||||
RETURNR var1
|
||||
|
||||
FUNCTION dest_add(integer, integer): integer
|
||||
STORE var1 arg0
|
||||
STORE var2 arg1
|
||||
ADD var3 var1 var2
|
||||
PUSH var3
|
||||
RETURN
|
||||
|
||||
FUNCTION dest_add_imm(integer):integer
|
||||
STORE var1 arg0
|
||||
ADD var3 var1 2
|
||||
PUSH var3
|
||||
RETURN
|
||||
|
||||
FUNCTION dest_add_stack(integer, integer): integer
|
||||
STORE var1 arg0
|
||||
PUSH arg1
|
||||
ADD var3 var1 a
|
||||
PUSH var3
|
||||
RETURN
|
||||
@@ -0,0 +1,4 @@
|
||||
;; CONTRACT remote
|
||||
FUNCTION add_five(integer):integer
|
||||
ADD a 5 arg0
|
||||
RETURN
|
||||
@@ -0,0 +1,45 @@
|
||||
;; CONTRACT: Test
|
||||
FUNCTION id(integer) -> integer
|
||||
RETURN
|
||||
|
||||
FUNCTION jumps() -> integer
|
||||
PUSH 0
|
||||
JUMP 3
|
||||
NOP
|
||||
JUMP 2
|
||||
NOP
|
||||
RETURN
|
||||
NOP
|
||||
JUMP 1
|
||||
|
||||
FUNCTION inc(integer) -> integer
|
||||
INC
|
||||
INC
|
||||
RETURN
|
||||
|
||||
FUNCTION call(integer) -> integer
|
||||
INC
|
||||
CALL inc
|
||||
INC
|
||||
RETURN
|
||||
|
||||
|
||||
FUNCTION tailcall(integer) -> integer
|
||||
INC
|
||||
CALL_T inc
|
||||
|
||||
FUNCTION remote_call(integer) : integer
|
||||
PUSH arg0
|
||||
CALL_R remote.add_five
|
||||
INC
|
||||
RETURN
|
||||
|
||||
FUNCTION remote_tailcall(integer) : integer
|
||||
PUSH arg0
|
||||
CALL_TR remote add_five
|
||||
|
||||
;; Test the code from the shell
|
||||
;; _build/default/rel/aessembler/bin/aessembler console
|
||||
|
||||
;; aeb_aefa:file("../../../../test/asm_code/test.fate", []).
|
||||
;; f(Asm), f(Env), f(BC), Asm = aefa_asm:read_file("../../../../test/asm_code/test.fate"), {Env, BC} = aefa_asm:asm_to_bytecode(Asm, []), aefa_asm:bytecode_to_fate_code(BC, []).
|
||||
@@ -0,0 +1,31 @@
|
||||
;;CONTRACT tuple
|
||||
FUNCTION make_0tuple():{tuple, []}
|
||||
TUPLE 0
|
||||
RETURN
|
||||
|
||||
FUNCTION make_2tuple(integer, integer):{tuple, [integer, integer]}
|
||||
PUSH arg0
|
||||
PUSH arg1
|
||||
TUPLE 2
|
||||
RETURN
|
||||
|
||||
FUNCTION make_5tuple(integer, integer, integer, integer, integer):
|
||||
{tuple, [integer, integer, integer, integer, integer]}
|
||||
PUSH arg0
|
||||
PUSH arg1
|
||||
PUSH arg2
|
||||
PUSH arg3
|
||||
PUSH arg4
|
||||
TUPLE 5
|
||||
RETURN
|
||||
|
||||
FUNCTION element1(integer, integer): integer
|
||||
PUSH arg0
|
||||
PUSH arg1
|
||||
TUPLE 2
|
||||
ELEMENT integer a 1 a
|
||||
RETURN
|
||||
|
||||
FUNCTION element({tuple, [integer, integer]}, integer): integer
|
||||
ELEMENT integer a arg1 arg0
|
||||
RETURN
|
||||
Reference in New Issue
Block a user