summaryrefslogtreecommitdiff
path: root/04/in03
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2022-01-08 10:17:03 -0500
committerpommicket <pommicket@gmail.com>2022-01-08 10:17:03 -0500
commitd48816e226d5ba081dadbba4bcded92e5c0a23d1 (patch)
treee97ee2cdccf4d241ecb4f6c9cdfac771f694feee /04/in03
parent5d6b490cce1a99a2541d1fcee101df4331d4d86a (diff)
parentd74f349e27a1ba20bd549362f95915ee6d2dd9d1 (diff)
merge term stuff
Diffstat (limited to '04/in03')
-rw-r--r--04/in03104
1 files changed, 50 insertions, 54 deletions
diff --git a/04/in03 b/04/in03
index 63cbbbc..99b3c6e 100644
--- a/04/in03
+++ b/04/in03
@@ -1238,6 +1238,12 @@ align
?C=D:term_number
D='.
?C=D:term_label
+ D='*
+ ?C=D:term_dereference
+ D='&
+ ?C=D:term_addressof
+ D='~
+ ?C=D:term_bitwise_not
D=d58
?C<D:term_number
; (fallthrough)
@@ -1274,16 +1280,6 @@ align
C=:rvalue
8C=I
- C=1I
- D='&
- ?C=D:rvalue_addressof
-
- D='~
- ?C=D:rvalue_bitwise_not
-
- D='*
- ?C=D:rvalue_dereference
-
J=I
:rvalue_loop
C=1J
@@ -1506,50 +1502,6 @@ align
:rvalue_shr
call :set_rcx_to_rsi
!:emit_shr_rax_cl
-
-:rvalue_addressof
- I+=d1
- !:set_rax_to_address_of_variable
-
-:rvalue_bitwise_not
- I+=d1
- call :set_rax_to_term
- J=d4
- I=:not_rax
- D=d3
- syscall x1
- return
-:not_rax
- x48
- xf7
- xd0
-
-:rvalue_dereference_size
- reserve d1
-
-:rvalue_dereference
- I+=d1
- D=1I
- C=:rvalue_dereference_size
- 1C=D
- I+=d1
- call :set_rax_to_variable
- call :set_rbx_to_rax
- call :zero_rax
- C=:rvalue_dereference_size
- C=1C
-
- D='1
- ?C=D:set_al_to_[rbx]
- D='2
- ?C=D:set_ax_to_[rbx]
- D='4
- ?C=D:set_eax_to_[rbx]
- D='8
- ?C=D:set_rax_to_[rbx]
-
- !:bad_term
-
; set <rax> to address of variable in rsi
:set_rax_to_address_of_variable
@@ -1600,7 +1552,51 @@ align
call :read_number
I=A
!:set_rax_to_immediate
+
+:term_bitwise_not
+ I+=d1
+ call :set_rax_to_term
+ J=d4
+ I=:not_rax
+ D=d3
+ syscall x1
+ return
+:not_rax
+ x48
+ xf7
+ xd0
+
+:term_dereference_size
+ reserve d1
+
+:term_dereference
+ I+=d1
+ D=1I
+ C=:term_dereference_size
+ 1C=D
+ I+=d1
+ call :set_rax_to_variable
+ call :set_rbx_to_rax
+ call :zero_rax
+ C=:term_dereference_size
+ C=1C
+ D='1
+ ?C=D:set_al_to_[rbx]
+ D='2
+ ?C=D:set_ax_to_[rbx]
+ D='4
+ ?C=D:set_eax_to_[rbx]
+ D='8
+ ?C=D:set_rax_to_[rbx]
+
+ !:bad_term
+
+:term_addressof
+ I+=d1
+ !:set_rax_to_address_of_variable
+
+
; set rax to the number in the string at rsi
:read_number
C=1I