mirror of
https://github.com/simple64/simple64.git
synced 2026-11-12 13:48:45 +01:00
Merge commit '57999ac9b9d32775efc271e0edfed27b784ee1c6' as 'parallel-rsp'
This commit is contained in:
commit
d9155d3878
377 files changed
+137898
No files matched your search
@@ -0,0 +1,6 @@
|
||||
RSP_TEST = main
|
||||
|
||||
PROGRAM = $(RSP_TEST)
|
||||
MIPS_OBJ = $(RSP_TEST).o
|
||||
|
||||
include Makefile.mips
|
||||
@@ -0,0 +1,40 @@
|
||||
####
|
||||
## Basic Makefile for RSP-MIPS
|
||||
##
|
||||
######
|
||||
|
||||
TARGET_ELF = $(PROGRAM).elf
|
||||
TARGET_BIN = $(PROGRAM).bin
|
||||
TARGET_GLOBAL_BIN = $(PROGRAM).global.bin
|
||||
MIPS_LD_SCRIPT = rsp-mips.ld
|
||||
|
||||
MIPS_OBJCOPY = mipsel-linux-gnu-objcopy
|
||||
MIPS_CC = mipsel-linux-gnu-gcc
|
||||
MIPS_AS = mipsel-linux-gnu-as
|
||||
MIPS_LD = mipsel-linux-gnu-ld
|
||||
CRT_OBJ = start.o rsp-mips.o
|
||||
|
||||
all: $(TARGET_BIN) $(TARGET_GLOBAL_BIN)
|
||||
|
||||
crt-obj: $(CRT_OBJ)
|
||||
|
||||
$(TARGET_BIN): $(TARGET_ELF)
|
||||
$(MIPS_OBJCOPY) -j .text $< $(TARGET_BIN) -O binary
|
||||
|
||||
$(TARGET_GLOBAL_BIN): $(TARGET_ELF)
|
||||
$(MIPS_OBJCOPY) -j .data $< $(TARGET_GLOBAL_BIN) -O binary
|
||||
|
||||
$(TARGET_ELF): $(MIPS_OBJ) $(CRT_OBJ)
|
||||
$(MIPS_LD) -T $(MIPS_LD_SCRIPT) -o $@ $(CRT_OBJ) $(MIPS_OBJ) -EB
|
||||
|
||||
%.o: %.s
|
||||
$(MIPS_AS) -o $@ $< -EB -mabi=eabi -march=mips1
|
||||
|
||||
%.o: %.c rsp-mips.h
|
||||
$(MIPS_CC) -c -o $@ $< -Os -EB -march=mips1 -mabi=eabi -mno-abicalls -std=gnu99 -nostdlib
|
||||
|
||||
clean:
|
||||
rm -f $(MIPS_OBJ) $(CRT_OBJ) $(TARGET_ELF) $(TARGET_HEX) $(TARGET_GLOBAL_HEX) $(TARGET_BIN) $(TARGET_GLOBAL_BIN)
|
||||
|
||||
.PHONY: all clean tools
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 40
|
||||
li $t1, -20
|
||||
add $t2, $t0, $t1
|
||||
addu $t3, $t0, $t1
|
||||
|
||||
li $t0, -5
|
||||
li $t1, -4
|
||||
add $t2, $t0, $t1
|
||||
addu $t3, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,9 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, 17
|
||||
addi $t0, $a0, -8
|
||||
addi $t1, $a0, 8
|
||||
addiu $t2, $a0, -8
|
||||
addiu $t3, $a0, 8
|
||||
break
|
||||
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 17
|
||||
li $t1, 5
|
||||
and $t2, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,6 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, -1
|
||||
andi $t0, $a0, 50000
|
||||
break
|
||||
@@ -0,0 +1,20 @@
|
||||
# This works on the Lightning JIT, but hangs the reference.
|
||||
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
li $t1, 1
|
||||
li $t2, 2
|
||||
li $t3, 0
|
||||
beq $t0, $t1, taken0 # This will be taken.
|
||||
beq $t0, $t1, taken1 # This will also be taken.
|
||||
li $t3, 3 # This will not be executed.
|
||||
|
||||
taken0:
|
||||
li $t6, 5 # This will be executed, the second branch then kicks in and runs taken1 path.
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4 # This will be executed.
|
||||
break
|
||||
@@ -0,0 +1,18 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
li $t1, 1
|
||||
li $t2, 2
|
||||
li $t3, 0
|
||||
beq $t0, $t1, taken0 # This will be taken.
|
||||
beq $t0, $t2, taken1 # Will not be taken.
|
||||
li $t3, 3
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,18 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
li $t1, 1
|
||||
li $t2, 2
|
||||
li $t3, 0
|
||||
beq $t0, $t2, taken0 # This will not be taken, should be ignored.
|
||||
beq $t0, $t1, taken1 # This will be taken.
|
||||
li $t3, 3
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, -1
|
||||
bgez $t0, taken1 # This will not be taken.
|
||||
li $t2, 10
|
||||
|
||||
li $t0, 0
|
||||
bgez $t0, taken1 # This will be taken.
|
||||
li $t2, 20
|
||||
|
||||
li $t0, 1
|
||||
bgez $t0, taken1 # This will be taken.
|
||||
li $t2, 30
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, -1
|
||||
bgezal $t0, taken1 # This will not be taken.
|
||||
li $t2, 10
|
||||
|
||||
li $t0, 0
|
||||
bgezal $t0, taken1 # This will be taken.
|
||||
li $t2, 20
|
||||
|
||||
li $t0, 1
|
||||
bgezal $t0, taken1 # This will be taken.
|
||||
li $t2, 30
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, -1
|
||||
bgtz $t0, taken1 # This will not be taken.
|
||||
li $t2, 10
|
||||
|
||||
li $t0, 0
|
||||
bgtz $t0, taken1 # This will not be taken.
|
||||
li $t2, 20
|
||||
|
||||
li $t0, 1
|
||||
bgtz $t0, taken1 # This will be taken.
|
||||
li $t2, 30
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
blez $t0, taken1 # This will not be taken.
|
||||
li $t2, 10
|
||||
|
||||
li $t0, 0
|
||||
blez $t0, taken1 # This will be taken.
|
||||
li $t2, 20
|
||||
|
||||
li $t0, 0
|
||||
blez $t0, taken1 # This will be taken.
|
||||
li $t2, 30
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
bltz $t0, taken1 # This will not be taken.
|
||||
li $t2, 10
|
||||
|
||||
li $t0, 0
|
||||
bltz $t0, taken1 # This will not be taken.
|
||||
li $t2, 20
|
||||
|
||||
li $t0, -1
|
||||
bltz $t0, taken1 # This will be taken.
|
||||
li $t2, 30
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
bltzal $t0, taken1 # This will not be taken.
|
||||
li $t2, 10
|
||||
|
||||
li $t0, 0
|
||||
bltzal $t0, taken1 # This will not be taken.
|
||||
li $t2, 20
|
||||
|
||||
li $t0, -1
|
||||
bltzal $t0, taken1 # This will be taken.
|
||||
li $t2, 30
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,20 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
li $t1, 1
|
||||
li $t2, 2
|
||||
li $t3, 0
|
||||
bne $t0, $t1, taken0 # This will not be taken.
|
||||
nop
|
||||
|
||||
bne $t0, $t2, taken1 # Will be taken.
|
||||
li $t3, 3
|
||||
|
||||
taken0:
|
||||
li $t4, 5
|
||||
break
|
||||
taken1:
|
||||
li $t4, 4
|
||||
break
|
||||
@@ -0,0 +1,15 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t1, ((0x50000000) << 5) & 0xffffffff
|
||||
li $t0, 0x50000000
|
||||
sll $t0, $t0, 5
|
||||
bne $t0, $t1, error
|
||||
nop
|
||||
|
||||
li $t2, 1
|
||||
break
|
||||
|
||||
error:
|
||||
li $t2, 2
|
||||
break
|
||||
@@ -0,0 +1,14 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 100
|
||||
mtc0 $t0, $1
|
||||
bgez $t0, bar
|
||||
mfc0 $t1, $1
|
||||
li $t1, 200 # Should not execute.
|
||||
break
|
||||
|
||||
bar:
|
||||
li $t2, 400
|
||||
break
|
||||
@@ -0,0 +1,16 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 10
|
||||
li $t2, 10
|
||||
nop
|
||||
.word (0x12 << 26) | (4 << 21) | (2 << 11) | (8 << 16) | (4 << 7)
|
||||
.word (0x12 << 26) | (0 << 21) | (2 << 11) | (9 << 16) | (4 << 7)
|
||||
#mtc2 $t0, $2, 4
|
||||
#mfc2 $t1, $2, 4
|
||||
|
||||
ctc2 $t2, $2
|
||||
cfc2 $t3, $2
|
||||
|
||||
break
|
||||
@@ -0,0 +1,15 @@
|
||||
.data
|
||||
buffer:
|
||||
.hword 10, 20, 30, 40, 50, 60, 70, 80
|
||||
.hword 20, 30, 40, 50, 60, 70, 80, 90
|
||||
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
la $t0, buffer
|
||||
# lqv 2, 0, 1(t0)
|
||||
.word (0x32 << 26) | (4 << 11) | (2 << 16) | (0 << 7) | (1 << 0) | (8 << 21)
|
||||
# sqv 2, 0, 2(t0)
|
||||
.word (0x3a << 26) | (4 << 11) | (2 << 16) | (0 << 7) | (2 << 0) | (8 << 21)
|
||||
break
|
||||
@@ -0,0 +1,18 @@
|
||||
.data
|
||||
buffer:
|
||||
.hword 10, 20, 30, 40, 50, 60, 70, 80
|
||||
.hword 20, 30, 40, 50, 60, 70, 80, 90
|
||||
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
la $t0, buffer
|
||||
# lqv 2, 0, 0(t0)
|
||||
.word (0x32 << 26) | (4 << 11) | (2 << 16) | (0 << 7) | (0 << 0) | (8 << 21)
|
||||
# lqv 3, 0, 1(t0)
|
||||
.word (0x32 << 26) | (4 << 11) | (3 << 16) | (0 << 7) | (1 << 0) | (8 << 21)
|
||||
|
||||
.word (0x25 << 25) | (4 << 6) | (2 << 11) | (3 << 16) | (17 << 0) | (0 << 21)
|
||||
# vsub v4, v2, v3, 0
|
||||
break
|
||||
@@ -0,0 +1,15 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
blez $t0, foo
|
||||
break
|
||||
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
foo:
|
||||
break
|
||||
@@ -0,0 +1,21 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
.align 10
|
||||
main:
|
||||
li $t0, 1
|
||||
.rept 126
|
||||
nop
|
||||
.endr
|
||||
bgtz $t0, foobar
|
||||
# New block begins here,
|
||||
j foobar2
|
||||
li $t2, 2 # This should not execute
|
||||
|
||||
foobar:
|
||||
li $t3, 3 # This should execute, then we move to foobar2
|
||||
break
|
||||
|
||||
foobar2:
|
||||
li $t4, 4 # This executes.
|
||||
break
|
||||
@@ -0,0 +1,19 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
.align 10
|
||||
main:
|
||||
li $t0, 0
|
||||
.rept 126
|
||||
nop
|
||||
.endr
|
||||
bgtz $t0, foobar
|
||||
# New block begins here,
|
||||
# last instruction will be bgtz which needs to promote its delay slot
|
||||
# into a new block.
|
||||
# First instruction of any block have to handle potential latent delay slots like these.
|
||||
li $t1, 1
|
||||
li $t2, 2 # This should execute
|
||||
|
||||
foobar:
|
||||
break
|
||||
@@ -0,0 +1,19 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
.align 10
|
||||
main:
|
||||
li $t0, 1
|
||||
.rept 126
|
||||
nop
|
||||
.endr
|
||||
bgtz $t0, foobar
|
||||
# New block begins here,
|
||||
# last instruction will be bgtz which needs to promote its delay slot
|
||||
# into a new block.
|
||||
# First instruction of any block have to handle potential latent delay slots like these.
|
||||
li $t1, 1
|
||||
li $t2, 2 # This should not execute
|
||||
|
||||
foobar:
|
||||
break
|
||||
@@ -0,0 +1,20 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
j indelay
|
||||
nop
|
||||
|
||||
j die # Test to make sure this becomes a conditional branch.
|
||||
|
||||
indelay:
|
||||
j notdie
|
||||
li $t0, 1
|
||||
|
||||
die:
|
||||
li $t0, 0x10000
|
||||
|
||||
notdie:
|
||||
li $t1, 2
|
||||
break
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
bgtz $0, dummy
|
||||
jal callsite
|
||||
li $t5, 10
|
||||
|
||||
jr $s5
|
||||
callsite:
|
||||
lw $t2, 184($0)
|
||||
li $t1, 10
|
||||
break
|
||||
|
||||
dummy:
|
||||
nop
|
||||
break
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
jal indelay
|
||||
nop
|
||||
|
||||
jal die # Test to make sure this becomes a conditional branch.
|
||||
|
||||
indelay:
|
||||
jal notdie
|
||||
move $t2, $ra
|
||||
li $t0, 1
|
||||
|
||||
die:
|
||||
li $t0, 0x10000
|
||||
|
||||
notdie:
|
||||
li $t1, 2
|
||||
break
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
la $t5, notdie
|
||||
la $ra, indelay
|
||||
jalr $a0, $ra
|
||||
move $ra, $a0
|
||||
|
||||
j die # Test to make sure this becomes a conditional branch.
|
||||
|
||||
indelay:
|
||||
jalr $a0, $t5
|
||||
move $t0, $a0
|
||||
|
||||
die:
|
||||
li $t0, 0x10000
|
||||
|
||||
notdie:
|
||||
li $t1, 2
|
||||
break
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
la $t5, notdie
|
||||
la $ra, indelay
|
||||
jr $ra
|
||||
nop
|
||||
|
||||
j die # Test to make sure this becomes a conditional branch.
|
||||
|
||||
indelay:
|
||||
jr $t5
|
||||
li $t0, 1
|
||||
|
||||
die:
|
||||
li $t0, 0x10000
|
||||
|
||||
notdie:
|
||||
li $t1, 2
|
||||
break
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
.data
|
||||
.byte 0, 0, 0
|
||||
foobar:
|
||||
.byte 0x72, 0x91
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lb $t0, 1($t1)
|
||||
break
|
||||
@@ -0,0 +1,11 @@
|
||||
.data
|
||||
.byte 0, 0, 0
|
||||
foobar:
|
||||
.byte 0x72, 0x91
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lbu $t0, 1($t1)
|
||||
break
|
||||
@@ -0,0 +1,12 @@
|
||||
.data
|
||||
.byte 0, 0, 0, 0
|
||||
foobar:
|
||||
.byte 0
|
||||
.byte 0x92, 0x70
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lh $t0, 1($t1)
|
||||
break
|
||||
@@ -0,0 +1,11 @@
|
||||
.data
|
||||
.byte 0, 0, 0, 0
|
||||
foobar:
|
||||
.byte 0x92, 0x70
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lh $t0, 0($t1)
|
||||
break
|
||||
@@ -0,0 +1,12 @@
|
||||
.data
|
||||
.byte 0, 0, 0, 0
|
||||
foobar:
|
||||
.byte 0
|
||||
.byte 0x92, 0x70
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lhu $t0, 1($t1)
|
||||
break
|
||||
@@ -0,0 +1,11 @@
|
||||
.data
|
||||
.byte 0, 0, 0, 0
|
||||
foobar:
|
||||
.byte 0x92, 0x70
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lhu $t0, 0($t1)
|
||||
break
|
||||
@@ -0,0 +1,5 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
lui $t0, 50000
|
||||
break
|
||||
@@ -0,0 +1,20 @@
|
||||
.data
|
||||
foo:
|
||||
.byte 0
|
||||
.byte 0xaa, 0xbb, 0xcc, 0xdd
|
||||
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
li $t0, 1
|
||||
la $t1, foo
|
||||
bgtz $t0, taken1
|
||||
lw $t1, 1($t1)
|
||||
|
||||
taken0:
|
||||
li $t5, 100
|
||||
break
|
||||
|
||||
taken1:
|
||||
break
|
||||
@@ -0,0 +1,15 @@
|
||||
.data
|
||||
.byte 0, 0, 0, 0
|
||||
foobar:
|
||||
.word 12345678
|
||||
.word 30
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lw $t0, 0($t1)
|
||||
lw $t1, 1($t1)
|
||||
lw $t2, 2($t1)
|
||||
lw $t3, 3($t1)
|
||||
break
|
||||
@@ -0,0 +1,12 @@
|
||||
.data
|
||||
.byte 0, 0, 0, 0
|
||||
foobar:
|
||||
.word 12345678
|
||||
.word 30
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
la $t1, foobar
|
||||
lw $t0, 4($t1)
|
||||
break
|
||||
@@ -0,0 +1,21 @@
|
||||
#include "rsp-mips.h"
|
||||
|
||||
u8 data[4] = { 0x10, 0x20, 0x30, 0x40 };
|
||||
|
||||
__attribute__((noinline))
|
||||
int load_byte(int i)
|
||||
{
|
||||
return data[i];
|
||||
}
|
||||
|
||||
int count = 3;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int res = 0;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
res += load_byte(i);
|
||||
}
|
||||
rsp_debug_break(res, res, res, res);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 17
|
||||
li $t1, 5
|
||||
nor $t2, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 8
|
||||
li $t1, 50
|
||||
or $t2, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,6 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, 500
|
||||
ori $t0, $a0, 50000
|
||||
break
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef __RSP_MIPS_H
|
||||
#define __RSP_MIPS_H
|
||||
|
||||
typedef signed char s8;
|
||||
typedef unsigned char u8;
|
||||
typedef signed short s16;
|
||||
typedef unsigned short u16;
|
||||
typedef signed int s32;
|
||||
typedef unsigned int u32;
|
||||
typedef signed long long s64;
|
||||
typedef unsigned long long u64;
|
||||
typedef u32 size_t;
|
||||
|
||||
void rsp_break(void);
|
||||
void rsp_debug_break(u32 a, u32 b, u32 c, u32 d);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,9 @@
|
||||
SECTIONS {
|
||||
ENTRY(rsp_mips_start)
|
||||
. = 0x00400000;
|
||||
.text : { start.o (.text); * (.text*); }
|
||||
|
||||
. = 0x00700000;
|
||||
.data : { * (.data); * (.rodata*); * (.sbss); * (.scommon); }
|
||||
.bss : { * (.bss); }
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
.text
|
||||
.section .text
|
||||
|
||||
.global rsp_break
|
||||
.ent rsp_break
|
||||
.type rsp_break, @function
|
||||
rsp_break:
|
||||
break
|
||||
jr $ra
|
||||
.end rsp_break
|
||||
.size rsp_break, .-rsp_break
|
||||
|
||||
.global rsp_debug_break
|
||||
.ent rsp_debug_break
|
||||
.type rsp_debug_break, @function
|
||||
rsp_debug_break:
|
||||
break
|
||||
jr $ra
|
||||
.end rsp_debug_break
|
||||
.size rsp_debug_break, .-rsp_debug_break
|
||||
@@ -0,0 +1,21 @@
|
||||
.data
|
||||
foobar:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 0xaabbccdd
|
||||
la $t1, foobar
|
||||
sb $t0, 0($t1)
|
||||
sb $t0, 1($t1)
|
||||
sb $t0, 3($t1)
|
||||
break
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
.data
|
||||
foobar:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 0xaabbccdd
|
||||
la $t1, foobar
|
||||
sh $t0, 0($t1)
|
||||
sh $t0, 3($t1)
|
||||
break
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
.data
|
||||
foobar:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 0xaabbccdd
|
||||
la $t1, foobar
|
||||
sh $t0, 0($t1)
|
||||
sh $t0, 2($t1)
|
||||
sh $t0, 6($t1)
|
||||
break
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 40
|
||||
sll $t0, $t0, 20
|
||||
break
|
||||
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 40
|
||||
li $t1, 20
|
||||
sllv $t0, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,12 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, 17
|
||||
li $a1, 5
|
||||
li $a2, -17
|
||||
li $a3, -5
|
||||
slt $t0, $a0, $a1
|
||||
slt $t1, $a3, $a0
|
||||
slt $t2, $a2, $a3
|
||||
slt $t3, $a2, $a1
|
||||
break
|
||||
@@ -0,0 +1,10 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, 100000
|
||||
li $a1, -100000
|
||||
slti $t0, $a0, -40
|
||||
slti $t1, $a0, 40
|
||||
slti $t2, $a1, -40
|
||||
slti $t3, $a1, 40
|
||||
break
|
||||
@@ -0,0 +1,10 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, 100000
|
||||
li $a1, -100000
|
||||
sltiu $t0, $a0, -40
|
||||
sltiu $t1, $a0, 40
|
||||
sltiu $t2, $a1, -40
|
||||
sltiu $t3, $a1, 40
|
||||
break
|
||||
@@ -0,0 +1,12 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, 17
|
||||
li $a1, 5
|
||||
li $a2, -17
|
||||
li $a3, -5
|
||||
sltu $t0, $a0, $a1
|
||||
sltu $t1, $a3, $a0
|
||||
sltu $t2, $a2, $a3
|
||||
sltu $t3, $a2, $a1
|
||||
break
|
||||
@@ -0,0 +1,6 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, -15254
|
||||
sra $t0, $t0, 20
|
||||
break
|
||||
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, -15254
|
||||
li $t1, 20
|
||||
srav $t0, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,6 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, -15254
|
||||
srl $t0, $t0, 20
|
||||
break
|
||||
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, -15254
|
||||
li $t1, 20
|
||||
srlv $t0, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,28 @@
|
||||
###
|
||||
##
|
||||
# Entry point and setup for our RSP
|
||||
##
|
||||
|
||||
.equ RAM_SIZE, 4096
|
||||
|
||||
.text
|
||||
.align 2
|
||||
.section .text
|
||||
.global rsp_mips_start
|
||||
.extern main
|
||||
.ent rsp_mips_start
|
||||
.type rsp_mips_start, @function
|
||||
|
||||
rsp_mips_start:
|
||||
nop
|
||||
redo:
|
||||
li $a0, 0 # argc = 0, it will never be used anyways on this stuff. :D
|
||||
li $a1, 0 # argv = 0
|
||||
li $sp, (0x00700000 + RAM_SIZE - 4) # Set up stack.
|
||||
|
||||
jal main
|
||||
j redo
|
||||
|
||||
.end rsp_mips_start
|
||||
.size rsp_mips_start, .-rsp_mips_start
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 40
|
||||
li $t1, -20
|
||||
sub $t2, $t0, $t1
|
||||
subu $t3, $t0, $t1
|
||||
|
||||
li $t0, -5
|
||||
li $t1, -4
|
||||
sub $t2, $t0, $t1
|
||||
subu $t3, $t0, $t1
|
||||
|
||||
break
|
||||
@@ -0,0 +1,22 @@
|
||||
.data
|
||||
foobar:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 0xaabbccdd
|
||||
la $t1, foobar
|
||||
sw $t0, 0($t1)
|
||||
sw $t0, 5($t1)
|
||||
sw $t0, 10($t1)
|
||||
sw $t0, 15($t1)
|
||||
break
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
.data
|
||||
foobar:
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
.word 0
|
||||
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 0xaabbccdd
|
||||
la $t1, foobar
|
||||
sw $t0, 0($t1)
|
||||
sw $t0, 4($t1)
|
||||
sw $t0, 12($t1)
|
||||
break
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
.text
|
||||
.set noreorder
|
||||
.global main
|
||||
main:
|
||||
jal foo
|
||||
break
|
||||
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
foo:
|
||||
break
|
||||
@@ -0,0 +1,7 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $t0, 17
|
||||
li $t1, 5
|
||||
xor $t2, $t0, $t1
|
||||
break
|
||||
@@ -0,0 +1,6 @@
|
||||
.text
|
||||
.global main
|
||||
main:
|
||||
li $a0, 500
|
||||
xori $t0, $a0, 50000
|
||||
break
|
||||
Reference in new issue
Block a user