Merge commit '57999ac9b9d32775efc271e0edfed27b784ee1c6' as 'parallel-rsp'

This commit is contained in:
Logan McNaughton committed 2020-10-31 15:49:56 -06:00
commit d9155d3878
377 files changed
+137898

No files matched your search

+6
View File
@@ -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
+13
View File
@@ -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
+9
View File
@@ -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
+7
View File
@@ -0,0 +1,7 @@
.text
.global main
main:
li $t0, 17
li $t1, 5
and $t2, $t0, $t1
break
+6
View File
@@ -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
+22
View File
@@ -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
+22
View File
@@ -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
+22
View File
@@ -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
+22
View File
@@ -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
+22
View File
@@ -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
+22
View File
@@ -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
+20
View File
@@ -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
+14
View File
@@ -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
+16
View File
@@ -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
+15
View File
@@ -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
+20
View File
@@ -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
+21
View File
@@ -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
+22
View File
@@ -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
+22
View File
@@ -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
+11
View File
@@ -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
+11
View File
@@ -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
+11
View File
@@ -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
+11
View File
@@ -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
+5
View File
@@ -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
+12
View File
@@ -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
+21
View File
@@ -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);
}
+7
View File
@@ -0,0 +1,7 @@
.text
.global main
main:
li $t0, 17
li $t1, 5
nor $t2, $t0, $t1
break
+7
View File
@@ -0,0 +1,7 @@
.text
.global main
main:
li $t0, 8
li $t1, 50
or $t2, $t0, $t1
break
+6
View File
@@ -0,0 +1,6 @@
.text
.global main
main:
li $a0, 500
ori $t0, $a0, 50000
break
+17
View File
@@ -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
+9
View File
@@ -0,0 +1,9 @@
SECTIONS {
ENTRY(rsp_mips_start)
. = 0x00400000;
.text : { start.o (.text); * (.text*); }
. = 0x00700000;
.data : { * (.data); * (.rodata*); * (.sbss); * (.scommon); }
.bss : { * (.bss); }
}
+20
View File
@@ -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
+21
View File
@@ -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
+21
View File
@@ -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
+6
View File
@@ -0,0 +1,6 @@
.text
.global main
main:
li $t0, 40
sll $t0, $t0, 20
break
+7
View File
@@ -0,0 +1,7 @@
.text
.global main
main:
li $t0, 40
li $t1, 20
sllv $t0, $t0, $t1
break
+12
View File
@@ -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
+10
View File
@@ -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
+10
View File
@@ -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
+12
View File
@@ -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
+6
View File
@@ -0,0 +1,6 @@
.text
.global main
main:
li $t0, -15254
sra $t0, $t0, 20
break
+7
View File
@@ -0,0 +1,7 @@
.text
.global main
main:
li $t0, -15254
li $t1, 20
srav $t0, $t0, $t1
break
+6
View File
@@ -0,0 +1,6 @@
.text
.global main
main:
li $t0, -15254
srl $t0, $t0, 20
break
+7
View File
@@ -0,0 +1,7 @@
.text
.global main
main:
li $t0, -15254
li $t1, 20
srlv $t0, $t0, $t1
break
+28
View File
@@ -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
+14
View File
@@ -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
+21
View File
@@ -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
+7
View File
@@ -0,0 +1,7 @@
.text
.global main
main:
li $t0, 17
li $t1, 5
xor $t2, $t0, $t1
break
+6
View File
@@ -0,0 +1,6 @@
.text
.global main
main:
li $a0, 500
xori $t0, $a0, 50000
break