projects
/
calu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[bench] vm: now working correct
[calu.git]
/
8_benchs
/
src
/
vm.s
diff --git
a/8_benchs/src/vm.s
b/8_benchs/src/vm.s
index 3d17099d81be8c54e3856009d1403c592c75b70e..bcb2a03a7ab1c1c7e479ad9717ff95e39e05b2f4 100644
(file)
--- a/
8_benchs/src/vm.s
+++ b/
8_benchs/src/vm.s
@@
-175,29
+175,31
@@
vm_dup:
;73
vm_imm:
;load new high byte
;73
vm_imm:
;load new high byte
- ldb r6, 4(r
2
)
+ ldb r6, 4(r
4
)
;shift high byte
lls r6, r6, 8
;load 2nd byte
;shift high byte
lls r6, r6, 8
;load 2nd byte
- ldb r7, 3(r
2
)
+ ldb r7, 3(r
4
)
;add to high byte
add r6, r6, r7
;shift
lls r6, r6, 8
;load
;add to high byte
add r6, r6, r7
;shift
lls r6, r6, 8
;load
- ldb r7, 2(r
2
)
+ ldb r7, 2(r
4
)
;add
add r6, r6, r7
;shift
lls r6, r6, 8
;load
;add
add r6, r6, r7
;shift
lls r6, r6, 8
;load
- ldb r7, 1(r
2
)
+ ldb r7, 1(r
4
)
;add
add r6, r6, r7
;store result to stack
stw r6, 0(r3)
;pc+4
addi r2, r2, 4
;add
add r6, r6, r7
;store result to stack
stw r6, 0(r3)
;pc+4
addi r2, r2, 4
+ ;increment sp
+ addi r3, r3, 4
br+ vm_loop
;case J
br+ vm_loop
;case J
@@
-213,8
+215,16
@@
vm_jmp:
addideq r2, r2, 1
breq+ vm_loop
;if != 0
addideq r2, r2, 1
breq+ vm_loop
;if != 0
+ ;set r6 to 0 (to clear upper bytes)
+ ldis r6, 0
;load pc+1 input
ldb r6, 1(r4)
;load pc+1 input
ldb r6, 1(r4)
+ ;compare input with neg. max of 8 bit
+ cmpi r6, 0x80
+ brlt- vm_possign
+ ldis r7, 0xFF00
+ add r6, r6, r7
+vm_possign:
;pc += data
add r2, r2, r6
br+ vm_loop
;pc += data
add r2, r2, r6
br+ vm_loop