projects
/
calu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[bench] vm: lut, inputdata, bug fixes
[calu.git]
/
8_benchs
/
src
/
vm.s
diff --git
a/8_benchs/src/vm.s
b/8_benchs/src/vm.s
index c9b7e04adf258359a49672beb049afe720bea392..e90902dd3f0677c23a9469ed7845d83b4d0c1277 100644
(file)
--- a/
8_benchs/src/vm.s
+++ b/
8_benchs/src/vm.s
@@
-3,26
+3,16
@@
inputdata:
;8 * 8 4
.fill 1, 0x382A3834
inputdata:
;8 * 8 4
.fill 1, 0x382A3834
-;8 * X 1
-.fill 1, 0x382A5831
;1 X * 8
.fill 1, 0x31582A38
;1 X * 8
.fill 1, 0x31582A38
-;- X D +
-.fill 1, 0x2D58442B
;+ D X -
.fill 1, 0x2B44582D
;P \xF8 J D
.fill 1, 0x50F84A44
;+ D X -
.fill 1, 0x2B44582D
;P \xF8 J D
.fill 1, 0x50F84A44
-;6 8 * +
-.fill 1, 0x36382A2B
;+ * 8 6
.fill 1, 0x2B2A3836
;+ * 8 6
.fill 1, 0x2B2A3836
-;D I \020 \000
-.fill 1, 0x44492000
;\000 \020 I D
.fill 1, 0x00204944
;\000 \020 I D
.fill 1, 0x00204944
-;\000 \000 < ~
-.fill 1, 0x00003C7E
;~ < \000 \000
.fill 1, 0x7E3C0000
;8 P \005 J
;~ < \000 \000
.fill 1, 0x7E3C0000
;8 P \005 J
@@
-36,10
+26,14
@@
stack:
.text
main:
ldi r1, inputdata
.text
main:
ldi r1, inputdata
+
+ ldw r0, 0(r2)
+
call+ vm
br+ main
vm:
call+ vm
br+ main
vm:
+ ;r0 ... lut address (can be overwritten)
;r1 ... addr to input
;r2 ... pc
;r3 ... effective stack address
;r1 ... addr to input
;r2 ... pc
;r3 ... effective stack address
@@
-59,8
+53,12
@@
vm_loop:
add r4, r1, r2
;load input
ldb r5, 0(r4)
add r4, r1, r2
;load input
ldb r5, 0(r4)
+ ;we need to multiply input by 4 to get correct address offset
+ lls r0, r5, 2
+ ;calc position in jumptable
+ ldw r0, jumptable(r0)
;jump to instr
;jump to instr
- brr r
5
+ brr r
0
vm_eof:
;load stack[sp-1]
vm_eof:
;load stack[sp-1]
@@
-252,7
+250,7
@@
vm_not:
.data
jumptable:
;0
.data
jumptable:
;0
-.fill
0
, vm_eof
+.fill
1
, vm_eof
.fill 40, vm_default
;42
.fill 1, vm_mul
.fill 40, vm_default
;42
.fill 1, vm_mul