Handle store and return_r.
This commit is contained in:
parent
27c9b50409
commit
65a806ed90
@ -100,6 +100,7 @@
|
||||
-define('SHA3' , 16#65).
|
||||
-define('SHA256' , 16#66).
|
||||
-define('BLAKE2B' , 16#67).
|
||||
-define('RETURNR' , 16#68).
|
||||
|
||||
-define('FUNCTION' , 16#fe).
|
||||
-define('EXTEND' , 16#ff).
|
||||
|
@ -419,7 +419,7 @@ to_list_of_types(Tokens) ->
|
||||
case to_type(Tokens) of
|
||||
{Type, [{',', _} | Rest]} ->
|
||||
{MoreTypes, Rest2} = to_list_of_types(Rest),
|
||||
{[Type|MoreTypes], Rest2}
|
||||
{[Type|MoreTypes], Rest2};
|
||||
{Type, [{']', _} | Rest]} ->
|
||||
{[Type], Rest}
|
||||
end.
|
||||
|
@ -26,6 +26,7 @@ a : {token, {stack, TokenLine, 0}}.
|
||||
a{INT} : {token, {stack, TokenLine, parse_acc(TokenChars)}}.
|
||||
|
||||
RETURN : {token, {mnemonic, TokenLine, 'RETURN'}}.
|
||||
RETURNR : {token, {mnemonic, TokenLine, 'RETURNR'}}.
|
||||
CALL : {token, {mnemonic, TokenLine, 'CALL'}}.
|
||||
FUNCTION : {token, {function, TokenLine, 'FUNCTION' }}.
|
||||
NOP : {token, {mnemonic, TokenLine, 'NOP'}}.
|
||||
|
@ -26,6 +26,7 @@ opcode({comment,X}) -> ?COMMENT(X).
|
||||
|
||||
mnemonic(?NOP) -> 'NOP' ;
|
||||
mnemonic(?RETURN) -> 'RETURN' ;
|
||||
mnemonic(?RETURNR) -> 'RETURNR' ;
|
||||
mnemonic(?PUSH) -> 'PUSH' ;
|
||||
mnemonic(?JUMP) -> 'JUMP' ;
|
||||
mnemonic(?JUMPIF) -> 'JUMPIF' ;
|
||||
@ -49,11 +50,13 @@ mnemonic(?EGT) -> 'EGT' ;
|
||||
mnemonic(?ELT) -> 'ELT' ;
|
||||
mnemonic(?EQ) -> 'EQ' ;
|
||||
mnemonic(?NEQ) -> 'NEQ' ;
|
||||
mnemonic(?STORE) -> 'STORE' ;
|
||||
mnemonic(OP) -> {OP, nothandled}.
|
||||
|
||||
m_to_op('NOP') -> ?NOP ;
|
||||
m_to_op('COMMENT') -> ?COMMENT("") ;
|
||||
m_to_op('RETURN') -> ?RETURN ;
|
||||
m_to_op('RETURNR') -> ?RETURNR ;
|
||||
m_to_op('PUSH') -> ?PUSH ;
|
||||
m_to_op('JUMP') -> ?JUMP ;
|
||||
m_to_op('JUMPIF') -> ?JUMPIF ;
|
||||
@ -73,6 +76,7 @@ m_to_op('ELT') -> ?ELT ;
|
||||
m_to_op('EGT') -> ?EGT ;
|
||||
m_to_op('EQ') -> ?EQ ;
|
||||
m_to_op('NEQ') -> ?NEQ ;
|
||||
m_to_op('STORE') -> ?STORE ;
|
||||
m_to_op('CALL') -> ?CALL ;
|
||||
m_to_op('CALL_T') -> ?CALL_T ;
|
||||
m_to_op('CALL_R') -> ?CALL_R ;
|
||||
@ -82,6 +86,7 @@ args(?NOP) -> 0;
|
||||
args(?RETURN) -> 0;
|
||||
args(?INC) -> 0;
|
||||
|
||||
args(?RETURNR) -> 1;
|
||||
args(?PUSH) -> 1;
|
||||
args(?JUMP) -> 1;
|
||||
args(?CALL) -> 1;
|
||||
@ -91,6 +96,7 @@ args(?JUMPIF) -> 2;
|
||||
args(?CALL_R) -> 2;
|
||||
args(?CALL_TR) -> 2;
|
||||
args(?NOT) -> 2;
|
||||
args(?STORE) -> 2;
|
||||
|
||||
args(?ADD) -> 3;
|
||||
args(?SUB) -> 3;
|
||||
@ -109,6 +115,7 @@ args(?NEQ) -> 3;
|
||||
args(_) -> 0. %% TODO do not allow this
|
||||
|
||||
end_bb(?RETURN) -> true;
|
||||
end_bb(?RETURNR)-> true;
|
||||
end_bb(?JUMP) -> true;
|
||||
end_bb(?JUMPIF) -> true;
|
||||
end_bb(?CALL) -> true;
|
||||
|
31
test/asm_code/memory.fate
Normal file
31
test/asm_code/memory.fate
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user