mirror of
https://github.com/Asraelite/littlebigcomputer.git
synced 2025-07-18 00:26:50 +00:00
Fix V8 emulator bugs
This commit is contained in:
parent
c45ad79440
commit
476972f85a
29 changed files with 281 additions and 18 deletions
|
@ -1,105 +0,0 @@
|
|||
; calculate all primitive pythogorean triples (a^2 + b^2 = c^2) where c <= 32
|
||||
|
||||
nop
|
||||
b _start
|
||||
|
||||
results:
|
||||
.repeat 0 15
|
||||
|
||||
table:
|
||||
.repeat 0 33
|
||||
|
||||
result_index:
|
||||
.data 0
|
||||
|
||||
_start:
|
||||
|
||||
li x7, 32 ; limit
|
||||
li x0, 1 ; prime
|
||||
li x2, 1 ; prime factor bit
|
||||
slli x2, x2, 23
|
||||
|
||||
loop_prime:
|
||||
|
||||
addi x0, x0, 1
|
||||
bgt x0, x7, squares
|
||||
lw x4, table(x0)
|
||||
srli x4, x4, 12
|
||||
bnez x4, loop_prime
|
||||
mv x3, x0 ; multiple
|
||||
|
||||
loop_index:
|
||||
|
||||
lw x4, table(x3) ; x4 = current prime factor bits
|
||||
or x4, x4, x2 ; x4 |= add current prime factor bit
|
||||
sw x4, table(x3)
|
||||
add x3, x3, x0
|
||||
ble x3, x7, loop_index
|
||||
srli x2, x2, 1 ; update prime bit
|
||||
b loop_prime
|
||||
|
||||
squares:
|
||||
|
||||
li x0, 0 ; n
|
||||
li x1, 0 ; n^2
|
||||
|
||||
loop_squares:
|
||||
|
||||
lw x4, table(x0) ; 70
|
||||
or x4, x4, x1
|
||||
sw x4, table(x0)
|
||||
add x1, x1, x0
|
||||
add x1, x1, x0
|
||||
addi x1, x1, 1
|
||||
addi x0, x0, 1
|
||||
ble x0, x7, loop_squares
|
||||
|
||||
li x0, 1 ; a = 1
|
||||
|
||||
iterate_a:
|
||||
|
||||
addi x0, x0, 1 ; 79
|
||||
bgt x0, x7, end
|
||||
lw x2, table(x0) ; a^2 (with prime bits)
|
||||
mv x6, x0 ; b = a
|
||||
|
||||
iterate_b:
|
||||
|
||||
addi x6, x6, 1 ; 83
|
||||
bgt x6, x7, iterate_a
|
||||
lw x3, table(x6) ; b^2 (with prime bits)
|
||||
and x4, x2, x3 ; check if a and b are coprime
|
||||
srli x4, x4, 12
|
||||
bnez x4, iterate_b ; 87
|
||||
add x3, x2, x3
|
||||
andi x3, x3, 0o77 ; a^2 + b^2
|
||||
mv x5, x6 ; x5 = c = b
|
||||
|
||||
; x0 = a, x1 = sp, x2 = a^2, x3 = a^2+b^2, x4 = (unused)
|
||||
; x5 = c, x6 = b, x7 = limit
|
||||
|
||||
iterate_c:
|
||||
|
||||
addi x5, x5, 1 ; c++ ; 92
|
||||
bgt x5, x7, iterate_b
|
||||
lw x4, table(x5) ; x4 = c^2|cp
|
||||
andi x4, x4, 0o77 ; x4 = c^2
|
||||
bgt x4, x3, iterate_b
|
||||
bne x5, x3, iterate_c
|
||||
|
||||
; found triple
|
||||
|
||||
; x0 = a, x6 = b, x5 = c
|
||||
|
||||
lw x4, result_index
|
||||
sw x0, 0(x4)
|
||||
sw x6, 1(x4)
|
||||
sw x5, 2(x4)
|
||||
addi x4, x4, 3
|
||||
sw x4, result_index
|
||||
|
||||
b iterate_a
|
||||
|
||||
end:
|
||||
|
||||
wfi
|
Loading…
Add table
Add a link
Reference in a new issue