- moved to mips software
git-svn-id: http://moon:8086/svn/vhdl/trunk@1378 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
@@ -1,249 +0,0 @@
|
|||||||
.file "exception.s"
|
|
||||||
|
|
||||||
.section .kdata,"a"
|
|
||||||
.align 2
|
|
||||||
_k_stack: .space 256, 0
|
|
||||||
_k_msg1: .asciiz "Exception at "
|
|
||||||
_k_msg2: .asciiz "EPC : "
|
|
||||||
_k_msg3: .asciiz "Cause : "
|
|
||||||
_k_msg4: .asciiz "Status : "
|
|
||||||
_k_msg5: .asciiz "BadVAddr : "
|
|
||||||
_k_crlf: .asciiz "\r\n"
|
|
||||||
_k_hextbl: .ascii "0123456789ABCDEF"
|
|
||||||
|
|
||||||
.section .ktext,"ax"
|
|
||||||
.align 2
|
|
||||||
|
|
||||||
.equ LED_STAT, 0x80000000
|
|
||||||
.equ UART_DATA, 0x80000004
|
|
||||||
.equ UART_STAT, 0x80000008
|
|
||||||
|
|
||||||
.macro kpush reg
|
|
||||||
addiu $sp, 4
|
|
||||||
sw \reg, 0($sp)
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro kpop reg
|
|
||||||
lw \reg, 0($sp)
|
|
||||||
addiu $sp, -4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
_exc_handler:
|
|
||||||
|
|
||||||
sw $sp, _k_stack
|
|
||||||
la $sp, _k_stack
|
|
||||||
kpush $8
|
|
||||||
kpush $9
|
|
||||||
kpush $10
|
|
||||||
kpush $11
|
|
||||||
kpush $12
|
|
||||||
kpush $31
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
# Get BadVAddr
|
|
||||||
mfc0 $10, $8
|
|
||||||
kpush $10
|
|
||||||
# Get Status
|
|
||||||
mfc0 $10, $12
|
|
||||||
kpush $10
|
|
||||||
# Get Cause
|
|
||||||
mfc0 $10, $13
|
|
||||||
kpush $10
|
|
||||||
srl $10, 29
|
|
||||||
andi $11, $10, 4
|
|
||||||
# Get EPC
|
|
||||||
mfc0 $10, $14
|
|
||||||
kpush $10
|
|
||||||
|
|
||||||
# Get real EPC
|
|
||||||
addu $10, $11
|
|
||||||
kpush $10
|
|
||||||
|
|
||||||
# Print CRLF
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print real EPC
|
|
||||||
la $11, _k_msg1
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print EPC
|
|
||||||
la $11, _k_msg2
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print Cause
|
|
||||||
la $11, _k_msg3
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print Status
|
|
||||||
la $11, _k_msg4
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print BadVAddr
|
|
||||||
la $11, _k_msg5
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Set Error LED and ExcCode LEDs
|
|
||||||
# Get Cause
|
|
||||||
mfc0 $26, $13
|
|
||||||
li $27, LED_STAT
|
|
||||||
srl $26, 2
|
|
||||||
andi $26, 0x000F
|
|
||||||
or $26, $27
|
|
||||||
sw $26, 0($27)
|
|
||||||
|
|
||||||
# wait for exception = 0
|
|
||||||
$w4x: mfc0 $26, $13
|
|
||||||
nop
|
|
||||||
srl $26, 8
|
|
||||||
andi $26, 1
|
|
||||||
bnez $26, $w4x
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Get return address
|
|
||||||
mfc0 $26, $14
|
|
||||||
|
|
||||||
kpop $31
|
|
||||||
kpop $12
|
|
||||||
kpop $11
|
|
||||||
kpop $10
|
|
||||||
kpop $9
|
|
||||||
kpop $8
|
|
||||||
lw $sp, _k_stack
|
|
||||||
|
|
||||||
# Return
|
|
||||||
jr $26
|
|
||||||
rfe
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
# word = $10
|
|
||||||
_kprint_word:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
srl $10, 16
|
|
||||||
jal _kprint_halfword
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_halfword
|
|
||||||
nop
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# halfword = $10
|
|
||||||
_kprint_halfword:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
srl $10, 8
|
|
||||||
jal _kprint_byte
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_byte
|
|
||||||
nop
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# byte = $10
|
|
||||||
_kprint_byte:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
srl $10, 4
|
|
||||||
jal _kprint_nibble
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_nibble
|
|
||||||
nop
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
_kprint_nibble:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
la $12, _k_hextbl
|
|
||||||
andi $10, 0xF
|
|
||||||
addu $12, $10
|
|
||||||
lbu $10, 0($12)
|
|
||||||
jal _ksaus
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# char = $10
|
|
||||||
_ksaus:
|
|
||||||
.set noreorder
|
|
||||||
li $8, UART_STAT
|
|
||||||
lbu $8, 0($8)
|
|
||||||
li $9, UART_DATA
|
|
||||||
andi $8, 0x02
|
|
||||||
bnez $8, _ksaus
|
|
||||||
nop
|
|
||||||
j $31
|
|
||||||
sb $10, 0($9)
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
_kputs:
|
|
||||||
.set noreorder
|
|
||||||
kpush $11
|
|
||||||
kpush $31
|
|
||||||
$kpl: lbu $10, 0($11)
|
|
||||||
addiu $11, 1
|
|
||||||
blez $10, $kpex
|
|
||||||
nop
|
|
||||||
jal _ksaus
|
|
||||||
nop
|
|
||||||
j $kpl
|
|
||||||
nop
|
|
||||||
$kpex: kpop $31
|
|
||||||
kpop $11
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
//#include <stdio.h>
|
|
||||||
//#include <stdlib.h>
|
|
||||||
//#include <string.h>
|
|
||||||
|
|
||||||
int faculty(int f0, int *pDst, int len)
|
|
||||||
{
|
|
||||||
int i=0;
|
|
||||||
|
|
||||||
pDst[i++] = f0;
|
|
||||||
|
|
||||||
for (; i < len; i++)
|
|
||||||
{
|
|
||||||
pDst[i] = pDst[i-1] * i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NUM_ELEMENTS 20
|
|
||||||
|
|
||||||
void saus(char c)
|
|
||||||
{
|
|
||||||
volatile char *pUART_stat = (char*)0x80000008;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
|
|
||||||
while((0x02 & *pUART_stat) != 0);
|
|
||||||
|
|
||||||
*pUART_data = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sputs(char *pStr)
|
|
||||||
{
|
|
||||||
char *start;
|
|
||||||
start = pStr;
|
|
||||||
|
|
||||||
while(*pStr)
|
|
||||||
saus(*(pStr++));
|
|
||||||
|
|
||||||
return pStr - start;
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_word(int word)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char c, nibble;
|
|
||||||
|
|
||||||
for (i=0; i < 8; i++)
|
|
||||||
|
|
||||||
{
|
|
||||||
nibble = (char)((word >> 28) & 0xF);
|
|
||||||
word <<= 4;
|
|
||||||
|
|
||||||
if (nibble < 10)
|
|
||||||
c = nibble + '0';
|
|
||||||
else
|
|
||||||
c = nibble + 'A' - 10;
|
|
||||||
|
|
||||||
saus(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
int buf[NUM_ELEMENTS], result, i, j, cnt;
|
|
||||||
volatile int *pReg = (int*)0x80000000;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
volatile char *pUART_ctrl = (char*)0x80000008;
|
|
||||||
volatile char *pUART_baud = (char*)0x80000009;
|
|
||||||
char msg[] = "MIPS R3000 CPU\r\nReady\r\n";
|
|
||||||
|
|
||||||
*pUART_baud = 0x35;
|
|
||||||
*pUART_ctrl = 0x55;
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
memset(buf, 0, sizeof(buf));
|
|
||||||
|
|
||||||
sputs(msg);
|
|
||||||
|
|
||||||
buf[NUM_ELEMENTS-1] = 1;
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
result = faculty(buf[NUM_ELEMENTS-1], buf, NUM_ELEMENTS);
|
|
||||||
|
|
||||||
for (i=0; i < NUM_ELEMENTS; i++)
|
|
||||||
{
|
|
||||||
print_word(buf[i]);
|
|
||||||
saus(13);
|
|
||||||
saus(10);
|
|
||||||
}
|
|
||||||
cnt++;
|
|
||||||
|
|
||||||
while(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,255 +0,0 @@
|
|||||||
.file 1 "faculty.c"
|
|
||||||
.set nobopt
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl faculty
|
|
||||||
.ent faculty
|
|
||||||
faculty:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $7,1 # 0x1
|
|
||||||
slt $2,$7,$6
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L7
|
|
||||||
sw $4,0($5)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $5,$5,4
|
|
||||||
$L5:
|
|
||||||
lw $2,-4($5)
|
|
||||||
mult $2,$7
|
|
||||||
addiu $7,$7,1
|
|
||||||
slt $3,$7,$6
|
|
||||||
mflo $2
|
|
||||||
sw $2,0($5)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $3,$0,$L5
|
|
||||||
addiu $5,$5,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L7:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
move $2,$7
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end faculty
|
|
||||||
.align 2
|
|
||||||
.globl saus
|
|
||||||
.ent saus
|
|
||||||
saus:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
sll $4,$4,24
|
|
||||||
sra $4,$4,24
|
|
||||||
ori $5,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L10:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x2
|
|
||||||
bne $2,$0,$L10
|
|
||||||
sb $4,0($5)
|
|
||||||
j $31
|
|
||||||
.end saus
|
|
||||||
.align 2
|
|
||||||
.globl sputs
|
|
||||||
.ent sputs
|
|
||||||
sputs:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
lb $4,0($4)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L18
|
|
||||||
move $17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L19:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
addiu $16,$16,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lb $4,0($16)
|
|
||||||
$L18:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$0,$L19
|
|
||||||
subu $2,$16,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sputs
|
|
||||||
.align 2
|
|
||||||
.globl print_word
|
|
||||||
.ent print_word
|
|
||||||
print_word:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
li $17,7 # 0x7
|
|
||||||
srl $3,$16,28
|
|
||||||
$L29:
|
|
||||||
sltu $2,$3,10
|
|
||||||
addiu $17,$17,-1
|
|
||||||
sll $16,$16,4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L25
|
|
||||||
addiu $4,$3,48
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $4,$3,55
|
|
||||||
$L25:
|
|
||||||
jal saus
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L29
|
|
||||||
srl $3,$16,28
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_word
|
|
||||||
.section .rodata.str1.4,"aMS",@progbits,1
|
|
||||||
.align 2
|
|
||||||
$LC0:
|
|
||||||
.ascii "MIPS R3000 CPU\r\n"
|
|
||||||
.ascii "Ready\r\n\000"
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl main
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame $sp,136,$31 # vars= 104, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
lw $2,$LC0
|
|
||||||
lw $3,$LC0+4
|
|
||||||
addiu $sp,$sp,-136
|
|
||||||
sw $2,96($sp)
|
|
||||||
sw $3,100($sp)
|
|
||||||
lw $2,$LC0+8
|
|
||||||
lw $3,$LC0+12
|
|
||||||
sw $2,104($sp)
|
|
||||||
sw $3,108($sp)
|
|
||||||
lw $2,$LC0+16
|
|
||||||
lw $3,$LC0+20
|
|
||||||
li $7,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $8,$7,0x9
|
|
||||||
sw $2,112($sp)
|
|
||||||
sw $3,116($sp)
|
|
||||||
ori $7,$7,0x8
|
|
||||||
li $3,85
|
|
||||||
sw $16,120($sp)
|
|
||||||
li $2,53
|
|
||||||
addiu $16,$sp,16
|
|
||||||
sb $2,0($8)
|
|
||||||
move $4,$16
|
|
||||||
sb $3,0($7)
|
|
||||||
move $5,$0
|
|
||||||
li $6,80 # 0x50
|
|
||||||
sw $31,128($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal memset
|
|
||||||
sw $17,124($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
addiu $4,$sp,96
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $3,1 # 0x1
|
|
||||||
sw $3,92($sp)
|
|
||||||
li $4,1 # 0x1
|
|
||||||
move $5,$16
|
|
||||||
li $6,20 # 0x14
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal faculty
|
|
||||||
move $17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $16,19 # 0x13
|
|
||||||
$L36:
|
|
||||||
lw $4,0($17)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
addiu $16,$16,-1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,13 # 0xd
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,10 # 0xa
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $16,$L36
|
|
||||||
addiu $17,$17,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L37:
|
|
||||||
j $L37
|
|
||||||
.end main
|
|
||||||
@@ -1,179 +0,0 @@
|
|||||||
//#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
//#include <string.h>
|
|
||||||
|
|
||||||
int fibonacci(int f0, int f1, int *pDst, int len)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
|
|
||||||
pDst[i++] = f0;
|
|
||||||
pDst[i++] = f1;
|
|
||||||
|
|
||||||
for (; i < len; i++)
|
|
||||||
{
|
|
||||||
pDst[i] = pDst[i-2] + pDst[i-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NUM_ELEMENTS 100
|
|
||||||
#define NUM_RUNS 1000
|
|
||||||
|
|
||||||
typedef struct _sstat_t
|
|
||||||
{
|
|
||||||
char v1;
|
|
||||||
int v2;
|
|
||||||
char v3;
|
|
||||||
short v4;
|
|
||||||
|
|
||||||
} __attribute__ ((__packed__)) stat_t;
|
|
||||||
|
|
||||||
void test_func(stat_t *pObj)
|
|
||||||
{
|
|
||||||
int *pReg = (int*)0x80000000;
|
|
||||||
|
|
||||||
|
|
||||||
*pReg = (int)pObj->v4;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
char sein(void)
|
|
||||||
{
|
|
||||||
volatile char *pUART_stat = (char*)0x80000008;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
|
|
||||||
while(!(0x10 & *pUART_stat));
|
|
||||||
|
|
||||||
return *pUART_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void saus(char c)
|
|
||||||
{
|
|
||||||
volatile char *pUART_stat = (char*)0x80000008;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
|
|
||||||
while((0x02 & *pUART_stat) != 0);
|
|
||||||
|
|
||||||
*pUART_data = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sputs(char *pStr)
|
|
||||||
{
|
|
||||||
char *start;
|
|
||||||
start = pStr;
|
|
||||||
|
|
||||||
while(*pStr)
|
|
||||||
saus(*(pStr++));
|
|
||||||
|
|
||||||
return pStr - start;
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_word(int word)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char c, nibble;
|
|
||||||
|
|
||||||
for (i=0; i < 8; i++)
|
|
||||||
|
|
||||||
{
|
|
||||||
nibble = (char)((word >> 28) & 0xF);
|
|
||||||
word <<= 4;
|
|
||||||
|
|
||||||
if (nibble < 10)
|
|
||||||
c = nibble + '0';
|
|
||||||
else
|
|
||||||
c = nibble + 'A' - 10;
|
|
||||||
|
|
||||||
saus(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
int buf[NUM_ELEMENTS], result, i, j, diff, num_right_elements, num_right_runs;
|
|
||||||
int fill, cnt, *pReg = (int*)0x80000000;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
volatile char *pUART_ctrl = (char*)0x80000008;
|
|
||||||
volatile char *pUART_baud = (char*)0x80000009;
|
|
||||||
int testbuf[2] = {0x12345678, 0x5555aaaa};
|
|
||||||
stat_t stat = {0x0D, 0xFF5A3FC1, 0x1E, 0x0F07};
|
|
||||||
char msg[] = "MIPS R3000 CPU\r\nReady\r\n";
|
|
||||||
char msg2[32];
|
|
||||||
char baud;
|
|
||||||
char *pPtr;
|
|
||||||
long long product;
|
|
||||||
int op1, op2;
|
|
||||||
|
|
||||||
div_t div_res;
|
|
||||||
|
|
||||||
*pUART_baud = 0x35;
|
|
||||||
*pUART_ctrl = 0x55;
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
fill = 0xAAAAAAAA;
|
|
||||||
memset(msg2, 0, sizeof(msg2));
|
|
||||||
memcpy(msg2, msg, strlen(msg));
|
|
||||||
|
|
||||||
srand(0x19701031);
|
|
||||||
for (i=0; i < sizeof(msg2)-1; i++)
|
|
||||||
msg2[i] = sein();
|
|
||||||
|
|
||||||
sputs(msg2);
|
|
||||||
test_func(&stat);
|
|
||||||
|
|
||||||
// div_res = div(testbuf[1], testbuf[0]);
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
num_right_runs = 0;
|
|
||||||
for (i=0; i < NUM_RUNS; i++)
|
|
||||||
{
|
|
||||||
for (j=0; j < NUM_ELEMENTS; j++)
|
|
||||||
buf[j] = fill;
|
|
||||||
|
|
||||||
fill = ((fill ^ i) - 1) << 1;
|
|
||||||
num_right_elements = 2;
|
|
||||||
result = fibonacci(i, i+1, buf, NUM_ELEMENTS);
|
|
||||||
for (j=2; j < NUM_ELEMENTS; j++)
|
|
||||||
{
|
|
||||||
diff = buf[j] - buf[j-1];
|
|
||||||
if (diff == buf[j-2])
|
|
||||||
num_right_elements++;
|
|
||||||
}
|
|
||||||
if (num_right_elements == NUM_ELEMENTS)
|
|
||||||
num_right_runs++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num_right_runs == NUM_RUNS)
|
|
||||||
{
|
|
||||||
*pReg = cnt & 0x3FFFFFFF;
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*pReg = 0x40000000 | cnt;
|
|
||||||
saus('X');
|
|
||||||
}
|
|
||||||
op1 = (int)-cnt;
|
|
||||||
op2 = (int)((op1 & 8) << 28) ^ rand();
|
|
||||||
product = (long long)op1 * (long long)op2;
|
|
||||||
print_word((int)op1);
|
|
||||||
saus(' ');
|
|
||||||
saus('x');
|
|
||||||
saus(' ');
|
|
||||||
print_word((int)op2);
|
|
||||||
saus(' ');
|
|
||||||
saus('=');
|
|
||||||
saus(' ');
|
|
||||||
print_word((int)(product >> 32));
|
|
||||||
print_word((int)product);
|
|
||||||
saus(13);
|
|
||||||
saus(10);
|
|
||||||
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,555 +0,0 @@
|
|||||||
.file 1 "fibonacci.c"
|
|
||||||
.set nobopt
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl fibonacci
|
|
||||||
.ent fibonacci
|
|
||||||
fibonacci:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $8,2 # 0x2
|
|
||||||
slt $2,$8,$7
|
|
||||||
sw $4,0($6)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L7
|
|
||||||
sw $5,4($6)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $6,$6,8
|
|
||||||
$L5:
|
|
||||||
lw $2,-8($6)
|
|
||||||
lw $3,-4($6)
|
|
||||||
addiu $8,$8,1
|
|
||||||
addu $2,$2,$3
|
|
||||||
slt $4,$8,$7
|
|
||||||
sw $2,0($6)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$0,$L5
|
|
||||||
addiu $6,$6,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L7:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
move $2,$8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end fibonacci
|
|
||||||
.align 2
|
|
||||||
.globl test_func
|
|
||||||
.ent test_func
|
|
||||||
test_func:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
lbu $2,7($4)
|
|
||||||
lbu $3,6($4)
|
|
||||||
sll $2,$2,8
|
|
||||||
or $2,$2,$3
|
|
||||||
sll $2,$2,16
|
|
||||||
sra $2,$2,16
|
|
||||||
li $3,-2147483648 # 0xffffffff80000000
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
sw $2,0($3)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end test_func
|
|
||||||
.align 2
|
|
||||||
.globl sein
|
|
||||||
.ent sein
|
|
||||||
sein:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $4,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L11:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x10
|
|
||||||
beq $2,$0,$L11
|
|
||||||
lbu $2,0($4)
|
|
||||||
sll $2,$2,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
sra $2,$2,24
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sein
|
|
||||||
.align 2
|
|
||||||
.globl saus
|
|
||||||
.ent saus
|
|
||||||
saus:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
sll $4,$4,24
|
|
||||||
sra $4,$4,24
|
|
||||||
ori $5,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L14:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x2
|
|
||||||
bne $2,$0,$L14
|
|
||||||
sb $4,0($5)
|
|
||||||
j $31
|
|
||||||
.end saus
|
|
||||||
.align 2
|
|
||||||
.globl sputs
|
|
||||||
.ent sputs
|
|
||||||
sputs:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
lb $4,0($4)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L22
|
|
||||||
move $17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L23:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
addiu $16,$16,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lb $4,0($16)
|
|
||||||
$L22:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$0,$L23
|
|
||||||
subu $2,$16,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sputs
|
|
||||||
.align 2
|
|
||||||
.globl print_word
|
|
||||||
.ent print_word
|
|
||||||
print_word:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
li $17,7 # 0x7
|
|
||||||
srl $3,$16,28
|
|
||||||
$L33:
|
|
||||||
sltu $2,$3,10
|
|
||||||
addiu $17,$17,-1
|
|
||||||
sll $16,$16,4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L29
|
|
||||||
addiu $4,$3,48
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $4,$3,55
|
|
||||||
$L29:
|
|
||||||
jal saus
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L33
|
|
||||||
srl $3,$16,28
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_word
|
|
||||||
.section .sdata,"aw",@progbits
|
|
||||||
.align 2
|
|
||||||
$LC0:
|
|
||||||
.word 305419896
|
|
||||||
.word 1431677610
|
|
||||||
.section .rodata.str1.4,"aMS",@progbits,1
|
|
||||||
.align 2
|
|
||||||
$LC2:
|
|
||||||
.ascii "MIPS R3000 CPU\r\n"
|
|
||||||
.ascii "Ready\r\n\000"
|
|
||||||
.section .sdata
|
|
||||||
.align 2
|
|
||||||
$LC1:
|
|
||||||
.byte 13
|
|
||||||
.4byte -10862655
|
|
||||||
.byte 30
|
|
||||||
.half 3847
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl main
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame $sp,536,$31 # vars= 480, regs= 10/0, args= 16, gp= 0
|
|
||||||
.mask 0xc0ff0000,-4
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
lw $2,$LC0
|
|
||||||
addiu $sp,$sp,-536
|
|
||||||
lw $3,$LC0+4
|
|
||||||
sw $2,416($sp)
|
|
||||||
lw $2,$LC2
|
|
||||||
lwl $4,$LC1+3
|
|
||||||
lwl $5,$LC1+7
|
|
||||||
sw $3,420($sp)
|
|
||||||
sw $2,432($sp)
|
|
||||||
lw $3,$LC2+4
|
|
||||||
lw $2,$LC2+8
|
|
||||||
lwr $5,$LC1+4
|
|
||||||
lwr $4,$LC1
|
|
||||||
sw $3,436($sp)
|
|
||||||
sw $2,440($sp)
|
|
||||||
lw $3,$LC2+12
|
|
||||||
lw $2,$LC2+16
|
|
||||||
sw $31,532($sp)
|
|
||||||
sw $5,428($sp)
|
|
||||||
sw $23,524($sp)
|
|
||||||
sw $22,520($sp)
|
|
||||||
sw $21,516($sp)
|
|
||||||
sw $20,512($sp)
|
|
||||||
sw $18,504($sp)
|
|
||||||
sw $17,500($sp)
|
|
||||||
sw $16,496($sp)
|
|
||||||
sw $4,424($sp)
|
|
||||||
sw $3,444($sp)
|
|
||||||
sw $fp,528($sp)
|
|
||||||
sw $19,508($sp)
|
|
||||||
sw $2,448($sp)
|
|
||||||
lw $3,$LC2+20
|
|
||||||
li $23,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $7,$23,0x9
|
|
||||||
sw $3,452($sp)
|
|
||||||
ori $6,$23,0x8
|
|
||||||
li $3,85
|
|
||||||
addiu $16,$sp,432
|
|
||||||
li $2,53
|
|
||||||
sb $2,0($7)
|
|
||||||
move $4,$16
|
|
||||||
sb $3,0($6)
|
|
||||||
li $2,-1431699456 # 0xffffffffaaaa0000
|
|
||||||
sw $0,456($sp)
|
|
||||||
sw $0,460($sp)
|
|
||||||
sw $0,464($sp)
|
|
||||||
sw $0,468($sp)
|
|
||||||
sw $0,472($sp)
|
|
||||||
sw $0,476($sp)
|
|
||||||
sw $0,480($sp)
|
|
||||||
sw $0,484($sp)
|
|
||||||
ori $20,$2,0xaaaa
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal strlen
|
|
||||||
addiu $18,$sp,456
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $6,$2
|
|
||||||
move $5,$16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal memcpy
|
|
||||||
move $4,$18
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $4,426770432 # 0x19700000
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal srand
|
|
||||||
ori $4,$4,0x1031
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $22,$0
|
|
||||||
move $17,$0
|
|
||||||
addiu $21,$sp,16
|
|
||||||
$L38:
|
|
||||||
addu $16,$21,$17
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sein
|
|
||||||
addiu $17,$17,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sltu $3,$17,31
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $3,$0,$L38
|
|
||||||
sb $2,440($16)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $4,$18
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal test_func
|
|
||||||
addiu $4,$sp,424
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $fp,100 # 0x64
|
|
||||||
move $18,$0
|
|
||||||
move $17,$0
|
|
||||||
$L54:
|
|
||||||
move $2,$21
|
|
||||||
li $6,99 # 0x63
|
|
||||||
$L47:
|
|
||||||
addiu $6,$6,-1
|
|
||||||
sw $20,0($2)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L47
|
|
||||||
addiu $2,$2,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
xor $2,$20,$17
|
|
||||||
addiu $16,$17,1
|
|
||||||
addiu $2,$2,-1
|
|
||||||
move $5,$16
|
|
||||||
addiu $6,$sp,16
|
|
||||||
li $7,100 # 0x64
|
|
||||||
move $4,$17
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal fibonacci
|
|
||||||
sll $20,$2,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $7,2 # 0x2
|
|
||||||
addiu $5,$21,8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L52
|
|
||||||
li $6,97 # 0x61
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L50:
|
|
||||||
bltz $6,$L65
|
|
||||||
$L52:
|
|
||||||
lw $2,0($5)
|
|
||||||
lw $3,-4($5)
|
|
||||||
lw $4,-8($5)
|
|
||||||
subu $2,$2,$3
|
|
||||||
addiu $6,$6,-1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$2,$L50
|
|
||||||
addiu $5,$5,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L52
|
|
||||||
addiu $7,$7,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L65:
|
|
||||||
beq $7,$fp,$L66
|
|
||||||
$L43:
|
|
||||||
slt $2,$16,1000
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L54
|
|
||||||
move $17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $2,1000 # 0x3e8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $18,$2,$L55
|
|
||||||
li $3,1073676288 # 0x3fff0000
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
ori $3,$3,0xffff
|
|
||||||
and $2,$22,$3
|
|
||||||
sw $2,0($23)
|
|
||||||
addiu $22,$22,1
|
|
||||||
subu $16,$0,$22
|
|
||||||
$L67:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
andi $17,$16,0x8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $17,$17,28
|
|
||||||
xor $17,$17,$2
|
|
||||||
mult $16,$17
|
|
||||||
mflo $18
|
|
||||||
mfhi $19
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,32 # 0x20
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,120 # 0x78
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,32 # 0x20
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,32 # 0x20
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,61 # 0x3d
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,32 # 0x20
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
sra $4,$19,0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$18
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,13 # 0xd
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
li $4,10 # 0xa
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $18,$0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L54
|
|
||||||
move $17,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L66:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L43
|
|
||||||
addiu $18,$18,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L55:
|
|
||||||
li $2,1073741824 # 0x40000000
|
|
||||||
or $2,$22,$2
|
|
||||||
li $4,88 # 0x58
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
sw $2,0($23)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L67
|
|
||||||
subu $16,$0,$22
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end main
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
MEMORY
|
|
||||||
{
|
|
||||||
imem : ORIGIN = 0x00000000, LENGTH = 0x00002000 /* 8K */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.stext 0x00000000 :
|
|
||||||
{
|
|
||||||
*(.stext)
|
|
||||||
} > imem
|
|
||||||
|
|
||||||
.ktext 0x00000180 :
|
|
||||||
{
|
|
||||||
*(.ktext)
|
|
||||||
} > imem
|
|
||||||
|
|
||||||
.text 0x00000200 :
|
|
||||||
{
|
|
||||||
*(.text)
|
|
||||||
} > imem
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
.file "init.s"
|
|
||||||
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl _init
|
|
||||||
.extern end
|
|
||||||
|
|
||||||
_init:
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# set uart
|
|
||||||
la $26, sys_uart_baud
|
|
||||||
addiu $27, $0, baudrate
|
|
||||||
sb $27, 0($26)
|
|
||||||
|
|
||||||
# set stack pointer
|
|
||||||
la $sp, end
|
|
||||||
|
|
||||||
# jump main
|
|
||||||
la $26, main
|
|
||||||
jalr $26
|
|
||||||
|
|
||||||
_terminate:
|
|
||||||
nop
|
|
||||||
j _terminate
|
|
||||||
nop
|
|
||||||
|
|
||||||
.set reorder
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
TARGET=$(basename $1 .c)
|
|
||||||
|
|
||||||
xtclsh.exe $TARGET.RAM.tcl
|
|
||||||
xtclsh.exe $TARGET.ROM.tcl
|
|
||||||
|
|
||||||
@@ -1,251 +0,0 @@
|
|||||||
.file "exception.s"
|
|
||||||
|
|
||||||
.section .kdata,"a"
|
|
||||||
.align 2
|
|
||||||
_k_stack: .space 256, 0
|
|
||||||
_k_msg1: .asciiz "Exception at "
|
|
||||||
_k_msg2: .asciiz "EPC : "
|
|
||||||
_k_msg3: .asciiz "Cause : "
|
|
||||||
_k_msg4: .asciiz "Status : "
|
|
||||||
_k_msg5: .asciiz "BadVAddr : "
|
|
||||||
_k_crlf: .asciiz "\r\n"
|
|
||||||
_k_hextbl: .ascii "0123456789ABCDEF"
|
|
||||||
|
|
||||||
.section .ktext,"ax"
|
|
||||||
.align 2
|
|
||||||
.globl _kputs
|
|
||||||
|
|
||||||
.macro kpush reg
|
|
||||||
addiu $sp, 4
|
|
||||||
sw \reg, 0($sp)
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro kpop reg
|
|
||||||
lw \reg, 0($sp)
|
|
||||||
addiu $sp, -4
|
|
||||||
.endm
|
|
||||||
|
|
||||||
_exc_handler:
|
|
||||||
|
|
||||||
sw $sp, _k_stack
|
|
||||||
la $sp, _k_stack
|
|
||||||
kpush $8
|
|
||||||
kpush $9
|
|
||||||
kpush $10
|
|
||||||
kpush $11
|
|
||||||
kpush $12
|
|
||||||
kpush $31
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
# Get BadVAddr
|
|
||||||
mfc0 $10, $8
|
|
||||||
kpush $10
|
|
||||||
# Get Status
|
|
||||||
mfc0 $10, $12
|
|
||||||
kpush $10
|
|
||||||
# Get Cause
|
|
||||||
mfc0 $10, $13
|
|
||||||
kpush $10
|
|
||||||
srl $10, 29
|
|
||||||
andi $11, $10, 4
|
|
||||||
# Get EPC
|
|
||||||
mfc0 $10, $14
|
|
||||||
kpush $10
|
|
||||||
|
|
||||||
# Get real EPC
|
|
||||||
addu $10, $11
|
|
||||||
kpush $10
|
|
||||||
|
|
||||||
# set uart
|
|
||||||
la $26, sys_uart_baud
|
|
||||||
addiu $27, $0, baudrate
|
|
||||||
sb $27, 0($26)
|
|
||||||
|
|
||||||
# Print CRLF
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print real EPC
|
|
||||||
la $11, _k_msg1
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print EPC
|
|
||||||
la $11, _k_msg2
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print Cause
|
|
||||||
la $11, _k_msg3
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print Status
|
|
||||||
la $11, _k_msg4
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Print BadVAddr
|
|
||||||
la $11, _k_msg5
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_word
|
|
||||||
nop
|
|
||||||
la $11, _k_crlf
|
|
||||||
jal _kputs
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Set Error LED and ExcCode LEDs
|
|
||||||
# Get Cause
|
|
||||||
mfc0 $26, $13
|
|
||||||
la $27, sys_led_port
|
|
||||||
srl $26, 2
|
|
||||||
andi $26, 0x000F
|
|
||||||
or $26, $27
|
|
||||||
sw $26, 0($27)
|
|
||||||
|
|
||||||
# wait for all interrupts = 0
|
|
||||||
$w4x: mfc0 $26, $13
|
|
||||||
nop
|
|
||||||
srl $26, 8
|
|
||||||
andi $26, 0xFF
|
|
||||||
bnez $26, $w4x
|
|
||||||
nop
|
|
||||||
|
|
||||||
# Get return address
|
|
||||||
mfc0 $26, $14
|
|
||||||
|
|
||||||
kpop $31
|
|
||||||
kpop $12
|
|
||||||
kpop $11
|
|
||||||
kpop $10
|
|
||||||
kpop $9
|
|
||||||
kpop $8
|
|
||||||
lw $sp, _k_stack
|
|
||||||
|
|
||||||
# Return
|
|
||||||
jr $26
|
|
||||||
rfe
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
# word = $10
|
|
||||||
_kprint_word:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
srl $10, 16
|
|
||||||
jal _kprint_halfword
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_halfword
|
|
||||||
nop
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# halfword = $10
|
|
||||||
_kprint_halfword:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
srl $10, 8
|
|
||||||
jal _kprint_byte
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_byte
|
|
||||||
nop
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# byte = $10
|
|
||||||
_kprint_byte:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
srl $10, 4
|
|
||||||
jal _kprint_nibble
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
jal _kprint_nibble
|
|
||||||
nop
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
_kprint_nibble:
|
|
||||||
.set noreorder
|
|
||||||
kpush $31
|
|
||||||
kpush $10
|
|
||||||
la $12, _k_hextbl
|
|
||||||
andi $10, 0xF
|
|
||||||
addu $12, $10
|
|
||||||
lbu $10, 0($12)
|
|
||||||
jal _ksaus
|
|
||||||
nop
|
|
||||||
kpop $10
|
|
||||||
kpop $31
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# char = $10
|
|
||||||
_ksaus:
|
|
||||||
.set noreorder
|
|
||||||
la $8, sys_uart_stat
|
|
||||||
lbu $8, 0($8)
|
|
||||||
la $9, sys_uart_data
|
|
||||||
andi $8, 0x02
|
|
||||||
bnez $8, _ksaus
|
|
||||||
nop
|
|
||||||
j $31
|
|
||||||
sb $10, 0($9)
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
_kputs:
|
|
||||||
.set noreorder
|
|
||||||
kpush $11
|
|
||||||
kpush $31
|
|
||||||
$kpl: lbu $10, 0($11)
|
|
||||||
addiu $11, 1
|
|
||||||
blez $10, $kpex
|
|
||||||
nop
|
|
||||||
jal _ksaus
|
|
||||||
nop
|
|
||||||
j $kpl
|
|
||||||
nop
|
|
||||||
$kpex: kpop $31
|
|
||||||
kpop $11
|
|
||||||
jr $31
|
|
||||||
nop
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
MEMORY
|
|
||||||
{
|
|
||||||
imem : ORIGIN = 0x00400000, LENGTH = 0x00004000 /* 8K */
|
|
||||||
dmem : ORIGIN = 0x00000000, LENGTH = 0x00002000 /* 8K */
|
|
||||||
}
|
|
||||||
|
|
||||||
end = 0x7FFFEFFC;
|
|
||||||
baudrate = 0x0D;
|
|
||||||
sys_led_port = 0x80000000;
|
|
||||||
sys_uart_baud = 0x80000009;
|
|
||||||
sys_uart_stat = 0x80000008;
|
|
||||||
sys_uart_data = 0x80000004;
|
|
||||||
sys_timer_sec = 0x80000014;
|
|
||||||
sys_timer_usec = 0x80000010;
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.stext 0x00400000 :
|
|
||||||
{
|
|
||||||
*(.stext)
|
|
||||||
} > imem
|
|
||||||
|
|
||||||
.ktext 0x00400180 :
|
|
||||||
{
|
|
||||||
*(.ktext)
|
|
||||||
} > imem
|
|
||||||
|
|
||||||
.text . :
|
|
||||||
{
|
|
||||||
*(.text)
|
|
||||||
} > imem
|
|
||||||
|
|
||||||
.data 0x00000000 : ALIGN(2)
|
|
||||||
{
|
|
||||||
*(.rodata*) *(.data) *(.sdata) *(.sbss) *(.kdata)
|
|
||||||
} > dmem
|
|
||||||
|
|
||||||
.bss . :
|
|
||||||
{
|
|
||||||
*(.bss)
|
|
||||||
} > dmem
|
|
||||||
|
|
||||||
.eh_frame . :
|
|
||||||
{
|
|
||||||
*(.eh_frame)
|
|
||||||
} > dmem
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
//#include <stdio.h>
|
|
||||||
//#include <stdlib.h>
|
|
||||||
//#include <string.h>
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
__asm
|
|
||||||
(
|
|
||||||
".set noreorder\n"
|
|
||||||
"li $8, 0x81234678\n"
|
|
||||||
"li $15, 0x10000000\n"
|
|
||||||
"li $16, 0xAAAAAAAA\n"
|
|
||||||
"li $17, 0xBBBBBBBB\n"
|
|
||||||
"li $18, 0xCCCCCCCC\n"
|
|
||||||
"li $19, 0xDDDDDDDD\n"
|
|
||||||
"li $24, 0x11111111\n"
|
|
||||||
"li $25, 0x22222222\n"
|
|
||||||
"li $26, 0x33333333\n"
|
|
||||||
"li $27, 0x44444444\n"
|
|
||||||
"sw $8, 0($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
"lwl $16, 0($15)\n"
|
|
||||||
"lwl $17, 1($15)\n"
|
|
||||||
"lwl $18, 2($15)\n"
|
|
||||||
"lwl $19, 3($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
"lwr $24, 0($15)\n"
|
|
||||||
"lwr $25, 1($15)\n"
|
|
||||||
"lwr $26, 2($15)\n"
|
|
||||||
"lwr $27, 3($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
"lbu $16, 0($15)\n"
|
|
||||||
"lbu $17, 1($15)\n"
|
|
||||||
"lbu $18, 2($15)\n"
|
|
||||||
"lbu $19, 3($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
"lb $16, 0($15)\n"
|
|
||||||
"lb $17, 1($15)\n"
|
|
||||||
"lb $18, 2($15)\n"
|
|
||||||
"lb $19, 3($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
"swl $8, 4($15)\n"
|
|
||||||
"swl $8, 9($15)\n"
|
|
||||||
"swl $8, 14($15)\n"
|
|
||||||
"swl $8, 19($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
"swr $8, 20($15)\n"
|
|
||||||
"swr $8, 25($15)\n"
|
|
||||||
"swr $8, 30($15)\n"
|
|
||||||
"swr $8, 35($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
"sb $8, 4($15)\n"
|
|
||||||
"sb $8, 5($15)\n"
|
|
||||||
"sb $8, 6($15)\n"
|
|
||||||
"sb $8, 7($15)\n"
|
|
||||||
"nop\n"
|
|
||||||
".set reorder\n"
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
.file 1 "load_store.c"
|
|
||||||
.set nobopt
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl main
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
#APP
|
|
||||||
.set noreorder
|
|
||||||
li $8, 0x81234678
|
|
||||||
li $15, 0x10000000
|
|
||||||
li $16, 0xAAAAAAAA
|
|
||||||
li $17, 0xBBBBBBBB
|
|
||||||
li $18, 0xCCCCCCCC
|
|
||||||
li $19, 0xDDDDDDDD
|
|
||||||
li $24, 0x11111111
|
|
||||||
li $25, 0x22222222
|
|
||||||
li $26, 0x33333333
|
|
||||||
li $27, 0x44444444
|
|
||||||
sw $8, 0($15)
|
|
||||||
nop
|
|
||||||
lwl $16, 0($15)
|
|
||||||
lwl $17, 1($15)
|
|
||||||
lwl $18, 2($15)
|
|
||||||
lwl $19, 3($15)
|
|
||||||
nop
|
|
||||||
lwr $24, 0($15)
|
|
||||||
lwr $25, 1($15)
|
|
||||||
lwr $26, 2($15)
|
|
||||||
lwr $27, 3($15)
|
|
||||||
nop
|
|
||||||
lbu $16, 0($15)
|
|
||||||
lbu $17, 1($15)
|
|
||||||
lbu $18, 2($15)
|
|
||||||
lbu $19, 3($15)
|
|
||||||
nop
|
|
||||||
lb $16, 0($15)
|
|
||||||
lb $17, 1($15)
|
|
||||||
lb $18, 2($15)
|
|
||||||
lb $19, 3($15)
|
|
||||||
nop
|
|
||||||
swl $8, 4($15)
|
|
||||||
swl $8, 9($15)
|
|
||||||
swl $8, 14($15)
|
|
||||||
swl $8, 19($15)
|
|
||||||
nop
|
|
||||||
swr $8, 20($15)
|
|
||||||
swr $8, 25($15)
|
|
||||||
swr $8, 30($15)
|
|
||||||
swr $8, 35($15)
|
|
||||||
nop
|
|
||||||
sb $8, 4($15)
|
|
||||||
sb $8, 5($15)
|
|
||||||
sb $8, 6($15)
|
|
||||||
sb $8, 7($15)
|
|
||||||
nop
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
#NO_APP
|
|
||||||
j $31
|
|
||||||
.end main
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
TARGET=$(basename $1 .c)
|
|
||||||
TARGET_CPU=r3000
|
|
||||||
ROM_WORDADDR_WIDTH=12
|
|
||||||
RAM_WORDADDR_WIDTH=11
|
|
||||||
|
|
||||||
echo Building $TARGET...
|
|
||||||
|
|
||||||
mipsel-elf-as.exe -march=$TARGET_CPU startup.s -o startup.o
|
|
||||||
mipsel-elf-as.exe -march=$TARGET_CPU init.s -o init.o
|
|
||||||
mipsel-elf-as.exe -march=$TARGET_CPU kernel.s -o kernel.o
|
|
||||||
|
|
||||||
#mipsel-elf-gcc -O2 -march=$TARGET_CPU $TARGET.c -o $TARGET.s -L $LIBDIR
|
|
||||||
|
|
||||||
mipsel-elf-gcc -msoft-float -O2 -c utils.c -o utils.o
|
|
||||||
mipsel-elf-gcc -msoft-float -O2 -c $TARGET.c -o $TARGET.o
|
|
||||||
mipsel-elf-ld.exe -G 0 -M -T link.ld startup.o init.o kernel.o utils.o $TARGET.o -o $TARGET.elf -L /usr/local/mipsel-elf/lib -L /usr/local/lib/gcc/mipsel-elf/3.4.6 -lc -lgcc >$TARGET.map
|
|
||||||
mipsel-elf-objdump.exe -d $TARGET.elf > $TARGET.dis
|
|
||||||
|
|
||||||
mipsel-elf-objcopy.exe -j .stext -j .ktext -j .text $TARGET.elf -O binary $TARGET.ROM.bin
|
|
||||||
mipsel-elf-objcopy.exe -j .data $TARGET.elf -O binary $TARGET.RAM.bin
|
|
||||||
|
|
||||||
./romgen.exe $TARGET.ROM.bin $ROM_WORDADDR_WIDTH
|
|
||||||
./ramgen.exe $TARGET.RAM.bin $RAM_WORDADDR_WIDTH
|
|
||||||
|
|
||||||
#xtclsh.exe $TARGET.RAM.tcl
|
|
||||||
#xtclsh.exe $TARGET.ROM.tcl
|
|
||||||
|
|
||||||
echo done.
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
main:
|
|
||||||
j lab
|
|
||||||
# nop
|
|
||||||
# break 52
|
|
||||||
lab:
|
|
||||||
li, $8, 0x81234678
|
|
||||||
|
|
||||||
# SB
|
|
||||||
li, $15, 0x10000000
|
|
||||||
li $16, 0x00400014
|
|
||||||
mtc0, $16, $14
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
rfe
|
|
||||||
|
|
||||||
# Address error exception
|
|
||||||
sw $8, 1($15)
|
|
||||||
sw $8, 2($15)
|
|
||||||
sw $8, 3($15)
|
|
||||||
|
|
||||||
# Address error exception
|
|
||||||
sh $8, 1($15)
|
|
||||||
|
|
||||||
# Address error exception
|
|
||||||
sh $8, 3($15)
|
|
||||||
|
|
||||||
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
SB (tested by SPIM)
|
|
||||||
VA(1..0) DMEM_WE ROL
|
|
||||||
0 0001 0
|
|
||||||
1 0010 1
|
|
||||||
2 0100 2
|
|
||||||
3 1000 3
|
|
||||||
|
|
||||||
SH (tested by SPIM)
|
|
||||||
VA(1..0) DMEM_WE ROL
|
|
||||||
0 0011 0
|
|
||||||
2 1100 2
|
|
||||||
|
|
||||||
SWL (tested by SPIM)
|
|
||||||
VA(1..0) DMEM_WE ROL
|
|
||||||
0 0001 1
|
|
||||||
1 0011 2
|
|
||||||
2 0111 3
|
|
||||||
3 1111 0
|
|
||||||
|
|
||||||
SWR (tested by SPIM)
|
|
||||||
VA(1..0) DMEM_WE ROL
|
|
||||||
0 1111 0
|
|
||||||
1 1110 1
|
|
||||||
2 1100 2
|
|
||||||
3 1000 3
|
|
||||||
|
|
||||||
LB (tested by SPIM)
|
|
||||||
VA(1..0) REG_WE ROR
|
|
||||||
0 1111 0
|
|
||||||
1 1111 1
|
|
||||||
2 1111 2
|
|
||||||
3 1111 3
|
|
||||||
|
|
||||||
LH (tested by SPIM)
|
|
||||||
VA(1..0) REG_WE ROR
|
|
||||||
0 1111 0
|
|
||||||
2 1111 2
|
|
||||||
|
|
||||||
LWL (tested by SPIM)
|
|
||||||
VA(1..0) REG_WE ROR
|
|
||||||
0 1000 1
|
|
||||||
1 1100 2
|
|
||||||
2 1110 3
|
|
||||||
3 1111 0
|
|
||||||
|
|
||||||
LWR (tested by SPIM)
|
|
||||||
VA(1..0) REG_WE ROR
|
|
||||||
0 1111 0
|
|
||||||
1 0111 1
|
|
||||||
2 0011 2
|
|
||||||
3 0001 3
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*SHIFTER* SB SH SWL SWR SW
|
|
||||||
shift_byp 0 0 0 0 1
|
|
||||||
shift_off 0 0 1 0 x
|
|
||||||
|
|
||||||
SHL = VA + shift_off
|
|
||||||
|
|
||||||
*Byte Enable* SB SH SWL SWR SW
|
|
||||||
be_byp 0 0 0 0 1
|
|
||||||
quarter_word_en 1 0 0 0 x
|
|
||||||
half_word_en 0 1 0 0 x
|
|
||||||
align_left x x 0 1 x
|
|
||||||
|
|
||||||
|
|
||||||
*SHIFTER* LB LH LWL LWR LW
|
|
||||||
shift_byp 0 0 0 0 1
|
|
||||||
shift_off 0 0 1 0 x
|
|
||||||
|
|
||||||
SHL = VA + shift_off
|
|
||||||
|
|
||||||
*Byte Enable* LB LH LWL LWR LW
|
|
||||||
be_byp 1 1 0 0 1
|
|
||||||
align_left x x 1 0 x
|
|
||||||
|
|
||||||
|
|
||||||
* Sign ext*
|
|
||||||
se_byp = shift_byp and (shift_byp and not be_byp)
|
|
||||||
|
|
||||||
|
|
||||||
00 11
|
|
||||||
01 10
|
|
||||||
10 01
|
|
||||||
11 00
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
//#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
//#include <string.h>
|
|
||||||
|
|
||||||
#define NUM_ELEMENTS 100
|
|
||||||
#define NUM_RUNS 1000
|
|
||||||
|
|
||||||
char sein(void)
|
|
||||||
{
|
|
||||||
volatile char *pUART_stat = (char*)0x80000008;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
|
|
||||||
while(!(0x10 & *pUART_stat));
|
|
||||||
|
|
||||||
return *pUART_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void saus(char c)
|
|
||||||
{
|
|
||||||
volatile char *pUART_stat = (char*)0x80000008;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
|
|
||||||
while((0x02 & *pUART_stat) != 0);
|
|
||||||
|
|
||||||
*pUART_data = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sputs(char *pStr)
|
|
||||||
{
|
|
||||||
char *start;
|
|
||||||
start = pStr;
|
|
||||||
|
|
||||||
while(*pStr)
|
|
||||||
saus(*(pStr++));
|
|
||||||
|
|
||||||
return pStr - start;
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_byte(char byte)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char c, nibble;
|
|
||||||
|
|
||||||
for (i=0; i < 2; i++)
|
|
||||||
{
|
|
||||||
nibble = (char)((byte >> 4) & 0xF);
|
|
||||||
byte <<= 4;
|
|
||||||
|
|
||||||
if (nibble < 10)
|
|
||||||
c = nibble + '0';
|
|
||||||
else
|
|
||||||
c = nibble + 'A' - 10;
|
|
||||||
|
|
||||||
saus(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_word(int word)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char c, nibble;
|
|
||||||
|
|
||||||
for (i=0; i < 4; i++)
|
|
||||||
{
|
|
||||||
c = (char) (word >> 24);
|
|
||||||
print_byte(c);
|
|
||||||
word <<= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
int cnt, i, j;
|
|
||||||
int mix, *pReg = (int*)0x80000000;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
volatile char *pUART_ctrl = (char*)0x80000008;
|
|
||||||
volatile char *pUART_baud = (char*)0x80000009;
|
|
||||||
char msg[] = "MIPS R3000 CPU\r\nMul/Div Test\r\n";
|
|
||||||
int s1, s2, sp, st;
|
|
||||||
|
|
||||||
div_t div_res;
|
|
||||||
|
|
||||||
*pUART_baud = 0x35;
|
|
||||||
*pUART_ctrl = 0x55;
|
|
||||||
|
|
||||||
srand(0x19701031);
|
|
||||||
|
|
||||||
sputs(msg);
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
for (i=0; i < 1000; i++)
|
|
||||||
{
|
|
||||||
for (j=1; j < 1000; j++)
|
|
||||||
{
|
|
||||||
mix = (int)rand();
|
|
||||||
mix = (mix << 8) ^ (mix << 16);
|
|
||||||
s1 = (int)rand() ^ mix;
|
|
||||||
mix = (int)rand();
|
|
||||||
mix = (mix << 8) ^ (mix << 16);
|
|
||||||
s2 = (int)rand() ^ mix;
|
|
||||||
// s1 = i;
|
|
||||||
// s2 = j;
|
|
||||||
|
|
||||||
div_res = div(s1, s2);
|
|
||||||
|
|
||||||
// print_word(s1);
|
|
||||||
// sputs(" / ");
|
|
||||||
// print_word(s2);
|
|
||||||
// sputs(" = ");
|
|
||||||
// print_word(div_res.quot);
|
|
||||||
// sputs(" R: ");
|
|
||||||
// print_word(div_res.rem);
|
|
||||||
// sputs(" -- ");
|
|
||||||
|
|
||||||
sp = s2*div_res.quot;
|
|
||||||
st = div_res.rem + sp;
|
|
||||||
if (st != s1)
|
|
||||||
{
|
|
||||||
sputs("Failed: ");
|
|
||||||
sputs("d*quot = ");
|
|
||||||
print_word(sp);
|
|
||||||
sputs("\r\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sputs("Iteration ");
|
|
||||||
print_word(cnt++);
|
|
||||||
sputs(": Passed\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,391 +0,0 @@
|
|||||||
.file 1 "muldiv.c"
|
|
||||||
.set nobopt
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl sein
|
|
||||||
.ent sein
|
|
||||||
sein:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $4,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L2:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x10
|
|
||||||
beq $2,$0,$L2
|
|
||||||
lbu $2,0($4)
|
|
||||||
sll $2,$2,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
sra $2,$2,24
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sein
|
|
||||||
.align 2
|
|
||||||
.globl saus
|
|
||||||
.ent saus
|
|
||||||
saus:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
sll $4,$4,24
|
|
||||||
sra $4,$4,24
|
|
||||||
ori $5,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L6:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x2
|
|
||||||
bne $2,$0,$L6
|
|
||||||
sb $4,0($5)
|
|
||||||
j $31
|
|
||||||
.end saus
|
|
||||||
.align 2
|
|
||||||
.globl sputs
|
|
||||||
.ent sputs
|
|
||||||
sputs:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
lb $4,0($4)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L14
|
|
||||||
move $17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L15:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
addiu $16,$16,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lb $4,0($16)
|
|
||||||
$L14:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$0,$L15
|
|
||||||
subu $2,$16,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sputs
|
|
||||||
.align 2
|
|
||||||
.globl print_byte
|
|
||||||
.ent print_byte
|
|
||||||
print_byte:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $16,16($sp)
|
|
||||||
sll $16,$4,24
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
sra $16,$16,24
|
|
||||||
li $17,1 # 0x1
|
|
||||||
sra $2,$16,4
|
|
||||||
$L25:
|
|
||||||
andi $5,$2,0xf
|
|
||||||
sll $2,$16,4
|
|
||||||
sll $16,$2,24
|
|
||||||
sltu $3,$5,10
|
|
||||||
addiu $17,$17,-1
|
|
||||||
sra $16,$16,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $3,$0,$L21
|
|
||||||
addiu $4,$5,48
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $4,$5,55
|
|
||||||
$L21:
|
|
||||||
jal saus
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L25
|
|
||||||
sra $2,$16,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_byte
|
|
||||||
.align 2
|
|
||||||
.globl print_word
|
|
||||||
.ent print_word
|
|
||||||
print_word:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
li $17,3 # 0x3
|
|
||||||
$L30:
|
|
||||||
sra $4,$16,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_byte
|
|
||||||
addiu $17,$17,-1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L30
|
|
||||||
sll $16,$16,8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_word
|
|
||||||
.section .rodata.str1.4,"aMS",@progbits,1
|
|
||||||
.align 2
|
|
||||||
$LC0:
|
|
||||||
.ascii "MIPS R3000 CPU\r\n"
|
|
||||||
.ascii "Mul/Div Test\r\n\000"
|
|
||||||
.align 2
|
|
||||||
$LC1:
|
|
||||||
.ascii "Failed: \000"
|
|
||||||
.align 2
|
|
||||||
$LC2:
|
|
||||||
.ascii "d*quot = \000"
|
|
||||||
.align 2
|
|
||||||
$LC3:
|
|
||||||
.ascii "\r\n\000"
|
|
||||||
.align 2
|
|
||||||
$LC4:
|
|
||||||
.ascii "Iteration \000"
|
|
||||||
.align 2
|
|
||||||
$LC5:
|
|
||||||
.ascii ": Passed\r\n\000"
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl main
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame $sp,88,$31 # vars= 40, regs= 7/0, args= 16, gp= 0
|
|
||||||
.mask 0x803f0000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
lw $2,$LC0
|
|
||||||
addiu $sp,$sp,-88
|
|
||||||
sw $2,16($sp)
|
|
||||||
lw $3,$LC0+4
|
|
||||||
lw $2,$LC0+8
|
|
||||||
sw $3,20($sp)
|
|
||||||
sw $2,24($sp)
|
|
||||||
lw $3,$LC0+12
|
|
||||||
lw $2,$LC0+16
|
|
||||||
sw $3,28($sp)
|
|
||||||
sw $2,32($sp)
|
|
||||||
lw $3,$LC0+20
|
|
||||||
lw $2,$LC0+24
|
|
||||||
sw $3,36($sp)
|
|
||||||
sw $2,40($sp)
|
|
||||||
lhu $3,$LC0+28
|
|
||||||
lbu $2,$LC0+30
|
|
||||||
li $5,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $6,$5,0x9
|
|
||||||
sh $3,44($sp)
|
|
||||||
sb $2,46($sp)
|
|
||||||
ori $5,$5,0x8
|
|
||||||
li $3,53
|
|
||||||
li $2,85
|
|
||||||
li $4,426770432 # 0x19700000
|
|
||||||
sb $3,0($6)
|
|
||||||
ori $4,$4,0x1031
|
|
||||||
sb $2,0($5)
|
|
||||||
sw $31,80($sp)
|
|
||||||
sw $21,76($sp)
|
|
||||||
sw $19,68($sp)
|
|
||||||
sw $20,72($sp)
|
|
||||||
sw $18,64($sp)
|
|
||||||
sw $17,60($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal srand
|
|
||||||
sw $16,56($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
addiu $4,$sp,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $21,$0
|
|
||||||
addiu $19,$sp,48
|
|
||||||
move $20,$0
|
|
||||||
$L44:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L43
|
|
||||||
li $18,1 # 0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L51:
|
|
||||||
beq $3,$0,$L50
|
|
||||||
$L43:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
addiu $18,$18,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $3,$2,16
|
|
||||||
sll $2,$2,8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
xor $16,$2,$3
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
xor $17,$2,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $3,$2,16
|
|
||||||
sll $2,$2,8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
xor $16,$2,$3
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
xor $16,$2,$16
|
|
||||||
move $6,$16
|
|
||||||
move $4,$19
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal div
|
|
||||||
move $5,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $2,48($sp)
|
|
||||||
mult $2,$16
|
|
||||||
lw $2,52($sp)
|
|
||||||
mflo $16
|
|
||||||
addu $2,$2,$16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$17,$L51
|
|
||||||
slt $3,$18,1000
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC1
|
|
||||||
jal sputs
|
|
||||||
la $4,$LC2
|
|
||||||
jal sputs
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC3
|
|
||||||
jal sputs
|
|
||||||
lw $31,80($sp)
|
|
||||||
lw $21,76($sp)
|
|
||||||
lw $20,72($sp)
|
|
||||||
lw $19,68($sp)
|
|
||||||
lw $18,64($sp)
|
|
||||||
lw $17,60($sp)
|
|
||||||
lw $16,56($sp)
|
|
||||||
li $2,-1 # 0xffffffffffffffff
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,88
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L50:
|
|
||||||
addiu $20,$20,1
|
|
||||||
slt $2,$20,1000
|
|
||||||
bne $2,$0,$L44
|
|
||||||
la $4,$LC4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $20,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$21
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC5
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
addiu $21,$21,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L43
|
|
||||||
li $18,1 # 0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end main
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
0x12345678 x 0x87654321
|
|
||||||
HI = f76c768d LO = 70b88d78 signed
|
|
||||||
HI = 09a0cd05 LO = 70b88d78 unsigned
|
|
||||||
|
|
||||||
0x87654321 x 0x12345678
|
|
||||||
HI = f76c768d LO = 70b88d78 signed
|
|
||||||
HI = 09a0cd05 LO = 70b88d78 unsigned
|
|
||||||
|
|
||||||
0x12345678 x 0x12345678
|
|
||||||
HI = 014b66dc LO = 1df4d840 signed
|
|
||||||
HI = 014b66dc LO = 1df4d840 unsigned
|
|
||||||
|
|
||||||
0x87654321 x 0x87654321
|
|
||||||
HI = 38d16e98 LO = d7a44a41 signed
|
|
||||||
HI = 479bf4da LO = d7a44a41 unsigned
|
|
||||||
|
|
||||||
|
|
||||||
p1 * n2 = not(p1 * (1 + not(n2)))
|
|
||||||
|
|
||||||
n1 * p1 = not((1 + not(n1)) * p2)
|
|
||||||
|
|
||||||
p1 * p2 = p1 * p2
|
|
||||||
|
|
||||||
n1 * n2 = not(n1) * not(n2);
|
|
||||||
|
|
||||||
|
|
||||||
12345678 * ( 87654321 not and FFFFFFFF ) = + 12345677 =
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,556 +0,0 @@
|
|||||||
.file 1 "rmd160_test.c"
|
|
||||||
.set nobopt
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl saus
|
|
||||||
.ent saus
|
|
||||||
saus:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
sll $4,$4,24
|
|
||||||
sra $4,$4,24
|
|
||||||
ori $5,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L2:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x2
|
|
||||||
bne $2,$0,$L2
|
|
||||||
sb $4,0($5)
|
|
||||||
j $31
|
|
||||||
.end saus
|
|
||||||
.align 2
|
|
||||||
.globl sputs
|
|
||||||
.ent sputs
|
|
||||||
sputs:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
lb $4,0($4)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L11
|
|
||||||
move $17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L12:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
addiu $16,$16,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lb $4,0($16)
|
|
||||||
$L11:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$0,$L12
|
|
||||||
subu $2,$16,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sputs
|
|
||||||
.align 2
|
|
||||||
.globl print_byte
|
|
||||||
.ent print_byte
|
|
||||||
print_byte:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $16,16($sp)
|
|
||||||
sll $16,$4,24
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
sra $16,$16,24
|
|
||||||
li $17,1 # 0x1
|
|
||||||
sra $2,$16,4
|
|
||||||
$L22:
|
|
||||||
andi $5,$2,0xf
|
|
||||||
sll $2,$16,4
|
|
||||||
sll $16,$2,24
|
|
||||||
sltu $3,$5,10
|
|
||||||
addiu $17,$17,-1
|
|
||||||
sra $16,$16,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $3,$0,$L18
|
|
||||||
addiu $4,$5,48
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $4,$5,55
|
|
||||||
$L18:
|
|
||||||
jal saus
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L22
|
|
||||||
sra $2,$16,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_byte
|
|
||||||
.align 2
|
|
||||||
.globl print_word
|
|
||||||
.ent print_word
|
|
||||||
print_word:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
li $17,3 # 0x3
|
|
||||||
$L27:
|
|
||||||
sra $4,$16,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_byte
|
|
||||||
addiu $17,$17,-1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L27
|
|
||||||
sll $16,$16,8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_word
|
|
||||||
|
|
||||||
.lcomm hashcode.0,20
|
|
||||||
.align 2
|
|
||||||
.globl RMD
|
|
||||||
.ent RMD
|
|
||||||
RMD:
|
|
||||||
.frame $sp,128,$31 # vars= 88, regs= 6/0, args= 16, gp= 0
|
|
||||||
.mask 0x801f0000,-4
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-128
|
|
||||||
sw $16,104($sp)
|
|
||||||
move $16,$4
|
|
||||||
addiu $4,$sp,16
|
|
||||||
sw $31,124($sp)
|
|
||||||
sw $20,120($sp)
|
|
||||||
sw $18,112($sp)
|
|
||||||
sw $17,108($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal MDinit
|
|
||||||
sw $19,116($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal strlen
|
|
||||||
move $4,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $18,$2
|
|
||||||
sltu $2,$2,64
|
|
||||||
move $17,$18
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L44
|
|
||||||
addiu $20,$sp,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $19,$sp,40
|
|
||||||
addiu $5,$20,24
|
|
||||||
$L50:
|
|
||||||
li $11,15 # 0xf
|
|
||||||
$L37:
|
|
||||||
lbu $2,3($16)
|
|
||||||
lbu $3,2($16)
|
|
||||||
lbu $4,1($16)
|
|
||||||
sll $3,$3,16
|
|
||||||
sll $2,$2,24
|
|
||||||
or $2,$2,$3
|
|
||||||
sll $4,$4,8
|
|
||||||
lbu $3,0($16)
|
|
||||||
or $2,$2,$4
|
|
||||||
or $2,$2,$3
|
|
||||||
addiu $11,$11,-1
|
|
||||||
sw $2,0($5)
|
|
||||||
addiu $16,$16,4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $11,$L37
|
|
||||||
addiu $5,$5,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $17,$17,-64
|
|
||||||
addiu $4,$sp,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal compress
|
|
||||||
move $5,$19
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sltu $2,$17,64
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L50
|
|
||||||
addiu $5,$20,24
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L44:
|
|
||||||
move $5,$16
|
|
||||||
move $6,$18
|
|
||||||
addiu $4,$sp,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal MDfinish
|
|
||||||
move $7,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $11,$0
|
|
||||||
la $15,hashcode.0
|
|
||||||
la $13,hashcode.0+1
|
|
||||||
la $14,hashcode.0+2
|
|
||||||
la $12,hashcode.0+3
|
|
||||||
$L42:
|
|
||||||
srl $2,$11,2
|
|
||||||
sll $2,$2,2
|
|
||||||
addu $2,$2,$20
|
|
||||||
lw $3,0($2)
|
|
||||||
addu $7,$11,$15
|
|
||||||
addu $8,$11,$13
|
|
||||||
addu $9,$11,$14
|
|
||||||
addu $10,$11,$12
|
|
||||||
addiu $11,$11,4
|
|
||||||
srl $6,$3,24
|
|
||||||
srl $2,$3,8
|
|
||||||
srl $4,$3,16
|
|
||||||
sltu $5,$11,20
|
|
||||||
sb $3,0($7)
|
|
||||||
sb $2,0($8)
|
|
||||||
sb $4,0($9)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $5,$0,$L42
|
|
||||||
sb $6,0($10)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,124($sp)
|
|
||||||
lw $20,120($sp)
|
|
||||||
lw $19,116($sp)
|
|
||||||
lw $18,112($sp)
|
|
||||||
lw $17,108($sp)
|
|
||||||
lw $16,104($sp)
|
|
||||||
la $2,hashcode.0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,128
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end RMD
|
|
||||||
.section .rodata.str1.4,"aMS",@progbits,1
|
|
||||||
.align 2
|
|
||||||
$LC0:
|
|
||||||
.ascii "\r\n\000"
|
|
||||||
.align 2
|
|
||||||
$LC1:
|
|
||||||
.ascii "* message: \000"
|
|
||||||
.align 2
|
|
||||||
$LC2:
|
|
||||||
.ascii " hashcode: \000"
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl RMDstring
|
|
||||||
.ent RMDstring
|
|
||||||
RMDstring:
|
|
||||||
.frame $sp,40,$31 # vars= 8, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
lbu $3,$LC0+2
|
|
||||||
lhu $2,$LC0
|
|
||||||
addiu $sp,$sp,-40
|
|
||||||
sw $31,32($sp)
|
|
||||||
sb $3,18($sp)
|
|
||||||
sw $17,28($sp)
|
|
||||||
sw $16,24($sp)
|
|
||||||
sh $2,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal RMD
|
|
||||||
move $16,$5
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $4,$sp,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $17,$2
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC1
|
|
||||||
jal sputs
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $4,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
addiu $4,$sp,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC2
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $16,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addu $2,$17,$16
|
|
||||||
$L58:
|
|
||||||
lb $4,0($2)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_byte
|
|
||||||
addiu $16,$16,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sltu $2,$16,20
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L58
|
|
||||||
addu $2,$17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
addiu $4,$sp,16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,32($sp)
|
|
||||||
lw $17,28($sp)
|
|
||||||
lw $16,24($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,40
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end RMDstring
|
|
||||||
.rdata
|
|
||||||
.align 2
|
|
||||||
$LC3:
|
|
||||||
.byte -1
|
|
||||||
.byte 35
|
|
||||||
.byte -100
|
|
||||||
.byte -42
|
|
||||||
.byte 89
|
|
||||||
.byte -118
|
|
||||||
.byte 121
|
|
||||||
.byte 46
|
|
||||||
.byte -89
|
|
||||||
.byte -85
|
|
||||||
.byte 108
|
|
||||||
.byte -8
|
|
||||||
.byte 117
|
|
||||||
.byte -74
|
|
||||||
.byte 53
|
|
||||||
.byte 94
|
|
||||||
.byte 93
|
|
||||||
.byte -128
|
|
||||||
.byte 106
|
|
||||||
.byte 54
|
|
||||||
.section .rodata.str1.4
|
|
||||||
.align 2
|
|
||||||
$LC4:
|
|
||||||
.ascii "MIPS R3000 CPU\000"
|
|
||||||
.align 2
|
|
||||||
$LC5:
|
|
||||||
.ascii "Failed\r\n\000"
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl main
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame $sp,88,$31 # vars= 48, regs= 5/0, args= 16, gp= 0
|
|
||||||
.mask 0x800f0000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
lwl $2,$LC3+3
|
|
||||||
lwl $3,$LC3+7
|
|
||||||
lwr $2,$LC3
|
|
||||||
lwr $3,$LC3+4
|
|
||||||
lwl $4,$LC3+11
|
|
||||||
lwl $5,$LC3+15
|
|
||||||
lwl $6,$LC3+19
|
|
||||||
addiu $sp,$sp,-88
|
|
||||||
lwr $4,$LC3+8
|
|
||||||
lwr $5,$LC3+12
|
|
||||||
lwr $6,$LC3+16
|
|
||||||
sw $2,16($sp)
|
|
||||||
sw $3,20($sp)
|
|
||||||
lw $2,$LC4
|
|
||||||
lw $3,$LC4+4
|
|
||||||
sw $19,76($sp)
|
|
||||||
sw $18,72($sp)
|
|
||||||
sw $17,68($sp)
|
|
||||||
sw $4,24($sp)
|
|
||||||
sw $5,28($sp)
|
|
||||||
sw $2,40($sp)
|
|
||||||
sw $31,80($sp)
|
|
||||||
sw $16,64($sp)
|
|
||||||
sw $6,32($sp)
|
|
||||||
sw $3,44($sp)
|
|
||||||
lw $2,$LC4+8
|
|
||||||
lhu $3,$LC4+12
|
|
||||||
sw $2,48($sp)
|
|
||||||
lbu $2,$LC4+14
|
|
||||||
sh $3,52($sp)
|
|
||||||
sb $2,54($sp)
|
|
||||||
lbu $3,$LC0+2
|
|
||||||
lhu $2,$LC0
|
|
||||||
li $4,-2147483648 # 0xffffffff80000000
|
|
||||||
sh $2,56($sp)
|
|
||||||
sb $3,58($sp)
|
|
||||||
ori $5,$4,0x9
|
|
||||||
li $2,53
|
|
||||||
ori $4,$4,0x8
|
|
||||||
li $3,85
|
|
||||||
sb $2,0($5)
|
|
||||||
move $18,$0
|
|
||||||
sb $3,0($4)
|
|
||||||
addiu $19,$sp,56
|
|
||||||
addiu $17,$sp,40
|
|
||||||
$L60:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$18
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $4,$19
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $18,$18,1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L66
|
|
||||||
li $16,32249 # 0x7df9
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L64:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bltz $16,$L70
|
|
||||||
move $4,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L66:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal RMD
|
|
||||||
move $4,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $4,$2
|
|
||||||
addiu $5,$sp,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal memcmp
|
|
||||||
li $6,20 # 0x14
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC5
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L64
|
|
||||||
addiu $16,$16,-1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
jal sputs
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $16,$L66
|
|
||||||
move $4,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L70:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal RMDstring
|
|
||||||
move $5,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
j $L60
|
|
||||||
.end main
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
main:
|
|
||||||
li, $8, 0x81234678
|
|
||||||
|
|
||||||
# SB
|
|
||||||
li, $15, 0x10000000
|
|
||||||
sw $8, 0($15)
|
|
||||||
|
|
||||||
|
|
||||||
mfc0 $9, $12
|
|
||||||
li $10, 0x02000000
|
|
||||||
or $9, $9, $10
|
|
||||||
mtc0 $9, $12
|
|
||||||
lwl $16, 0($15)
|
|
||||||
lwl $17, 1($15)
|
|
||||||
lwl $18, 2($15)
|
|
||||||
lwl $19, 3($15)
|
|
||||||
nop
|
|
||||||
lwr $24, 0($15)
|
|
||||||
lwr $25, 1($15)
|
|
||||||
lwr $26, 2($15)
|
|
||||||
lwr $27, 3($15)
|
|
||||||
nop
|
|
||||||
lbu $16, 0($15)
|
|
||||||
lbu $17, 1($15)
|
|
||||||
lbu $18, 2($15)
|
|
||||||
lbu $19, 3($15)
|
|
||||||
nop
|
|
||||||
lb $24, 0($15)
|
|
||||||
lb $25, 1($15)
|
|
||||||
lb $26, 2($15)
|
|
||||||
lb $27, 3($15)
|
|
||||||
nop
|
|
||||||
swl $8, 4($15)
|
|
||||||
swl $8, 9($15)
|
|
||||||
swl $8, 14($15)
|
|
||||||
swl $8, 19($15)
|
|
||||||
nop
|
|
||||||
swr $8, 20($15)
|
|
||||||
swr $8, 25($15)
|
|
||||||
swr $8, 30($15)
|
|
||||||
swr $8, 35($15)
|
|
||||||
nop
|
|
||||||
sb $8, 0($15)
|
|
||||||
sb $8, 1($15)
|
|
||||||
sb $8, 2($15)
|
|
||||||
sb $8, 3($15)
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
.file "startup.s"
|
|
||||||
|
|
||||||
.section .stext,"ax"
|
|
||||||
.extern _init
|
|
||||||
.align 2
|
|
||||||
|
|
||||||
_start:
|
|
||||||
.set noreorder
|
|
||||||
|
|
||||||
# Set Kernel mode
|
|
||||||
li $26, 0x1040040C
|
|
||||||
mtc0 $26, $12
|
|
||||||
li $26, 0x00000000
|
|
||||||
mtc0 $26, $13
|
|
||||||
|
|
||||||
mfc0 $26, $15
|
|
||||||
nop
|
|
||||||
mtc0 $26, $31
|
|
||||||
|
|
||||||
# jump init
|
|
||||||
la $26, _init
|
|
||||||
jr $26
|
|
||||||
|
|
||||||
# set user mode
|
|
||||||
rfe
|
|
||||||
|
|
||||||
.set reorder
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
.text
|
|
||||||
.globl main
|
|
||||||
.globl __start
|
|
||||||
|
|
||||||
__start: j main
|
|
||||||
|
|
||||||
main: lui $1, 0x1234
|
|
||||||
ori $1, $1, 0x5678
|
|
||||||
andi $1, $1, 0xF00F
|
|
||||||
addi $1, -0x5004
|
|
||||||
loop: addi $1, -1
|
|
||||||
bgtz $1, loop
|
|
||||||
lui $2, 0
|
|
||||||
ori $2, 1
|
|
||||||
lui $1, 0
|
|
||||||
ori $1, 4
|
|
||||||
loop2: sub $1, $1, $2
|
|
||||||
bgtz $1, loop2
|
|
||||||
lui $31, 0x0040
|
|
||||||
jr $31
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
.text
|
|
||||||
.globl main
|
|
||||||
.globl __start
|
|
||||||
|
|
||||||
__start: j main
|
|
||||||
|
|
||||||
main: lui $1, 0x1234
|
|
||||||
ori $1, $1, 0x5678
|
|
||||||
lui $3, 0x5555
|
|
||||||
ori $3, $3, 0xAAAA
|
|
||||||
lui $2, 0x1000
|
|
||||||
sw $1, 0($2)
|
|
||||||
sw $3, 4($2)
|
|
||||||
sw $2, 0($2)
|
|
||||||
sw $1, 4($2)
|
|
||||||
lw $1, 4($2)
|
|
||||||
lw $4, 0($2)
|
|
||||||
lui $5, 0x0001
|
|
||||||
lui $6, 0x0002
|
|
||||||
lui $7, 0x0003
|
|
||||||
lui $8, 0x0004
|
|
||||||
add $4, $4, $5
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
j main
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
.text
|
|
||||||
.globl main
|
|
||||||
.globl __start
|
|
||||||
|
|
||||||
__start: j main
|
|
||||||
|
|
||||||
main: lui $1, 0x1234
|
|
||||||
ori $1, $1, 0x5A5A
|
|
||||||
sll $1, $1, 1
|
|
||||||
sll $1, $1, 4
|
|
||||||
sll $1, $1, 2
|
|
||||||
sll $1, $1, 1
|
|
||||||
sll $1, $1, 8
|
|
||||||
srl $1, $1, 2
|
|
||||||
srl $1, $1, 5
|
|
||||||
srl $1, $1, 1
|
|
||||||
srl $1, $1, 8
|
|
||||||
xori $1, $1, 0xFFFF
|
|
||||||
lui $31, 0x0040
|
|
||||||
jr $31
|
|
||||||
xor $1, $1, $31
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
.text
|
|
||||||
.globl main
|
|
||||||
.globl __start
|
|
||||||
|
|
||||||
__start: j main
|
|
||||||
|
|
||||||
main: sll $0, $0, 0
|
|
||||||
lui $1, 0x1000
|
|
||||||
addi $2, $1, 0
|
|
||||||
lui $7, 0x1234
|
|
||||||
lui $5, 0x0001
|
|
||||||
sw $7, 0($1)
|
|
||||||
lw $3, 0($2)
|
|
||||||
add $8, $3, $5
|
|
||||||
add $9, $3, $5
|
|
||||||
add $10, $3, $5
|
|
||||||
add $11, $3, $5
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
j main
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
.text
|
|
||||||
.globl main
|
|
||||||
.globl __start
|
|
||||||
|
|
||||||
__start: j main
|
|
||||||
|
|
||||||
main: lui $1, 0x8000
|
|
||||||
lui $2, 0
|
|
||||||
lui $3, 0
|
|
||||||
ori $2, 1
|
|
||||||
ori $3, 3
|
|
||||||
srl $1, $1, 1
|
|
||||||
sll $1, $1, 1
|
|
||||||
sra $1, $1, 1
|
|
||||||
sra $1, $1, 3
|
|
||||||
sllv $4, $1, $3
|
|
||||||
srav $5, $1, $2
|
|
||||||
srav $6, $1, $3
|
|
||||||
lui $31, 0x0040
|
|
||||||
jr $31
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
.text
|
|
||||||
.globl main
|
|
||||||
.globl __start
|
|
||||||
|
|
||||||
__start: j main
|
|
||||||
|
|
||||||
main: lui $8, 0
|
|
||||||
loop: sll $0, $0, 0
|
|
||||||
jal subr1
|
|
||||||
la $2, subr2
|
|
||||||
jalr $15, $2
|
|
||||||
sll $0, $0, 0
|
|
||||||
j loop
|
|
||||||
|
|
||||||
subr1: addi $8, 1
|
|
||||||
sll $0, $0, 0
|
|
||||||
jr $31
|
|
||||||
subr2: addi $8, 16
|
|
||||||
sll $0, $0, 0
|
|
||||||
jr $15
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
|
|
||||||
main: li $2, 0x12345678
|
|
||||||
li $3, 0x87654321
|
|
||||||
mult $2, $3
|
|
||||||
multu $2, $3
|
|
||||||
mult $3, $2
|
|
||||||
multu $3, $2
|
|
||||||
|
|
||||||
mult $2, $2
|
|
||||||
multu $2, $2
|
|
||||||
mult $3, $3
|
|
||||||
multu $3, $3
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
j main
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
.text
|
|
||||||
.globl main
|
|
||||||
.globl __start
|
|
||||||
|
|
||||||
__start: j main
|
|
||||||
|
|
||||||
main: li $2, 0x12345678
|
|
||||||
li $4, 0x12345678
|
|
||||||
li $6, 0x12345678
|
|
||||||
li $8, 0x12345678
|
|
||||||
li $3, 0x77654321
|
|
||||||
li $5, 0x77654321
|
|
||||||
li $7, 0x77654321
|
|
||||||
li $9, 0x77654321
|
|
||||||
addu $15, $2, $3
|
|
||||||
addu $15, $3, $2
|
|
||||||
addu $15, $2, $2
|
|
||||||
addu $15, $3, $3
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
subu $15, $2, $3
|
|
||||||
subu $15, $3, $2
|
|
||||||
subu $15, $2, $2
|
|
||||||
subu $15, $3, $3
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
addiu $4, 0x1234
|
|
||||||
addiu $8, -0x1234
|
|
||||||
addiu $5, 0x1234
|
|
||||||
addiu $9, -0x1234
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
add $15, $2, $3
|
|
||||||
add $15, $3, $2
|
|
||||||
add $15, $2, $2
|
|
||||||
add $15, $3, $3
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
sub $15, $2, $3
|
|
||||||
sub $15, $3, $2
|
|
||||||
sub $15, $2, $2
|
|
||||||
sub $15, $3, $3
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
addi $2, 0x1234
|
|
||||||
addi $6, -0x1234
|
|
||||||
addi $3, 0x1234
|
|
||||||
addi $7, -0x1234
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
j main
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
main:
|
|
||||||
li $8, 0x12345678
|
|
||||||
li $9, 0x87654321
|
|
||||||
mthi $8
|
|
||||||
mfhi $10
|
|
||||||
addu $16, $10, $9
|
|
||||||
|
|
||||||
mtlo $9
|
|
||||||
mflo $11
|
|
||||||
multu $8, $9
|
|
||||||
# addu $17, $11, $8
|
|
||||||
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# .ktext 0x80000180
|
|
||||||
.text 0x00410000
|
|
||||||
.globl main
|
|
||||||
|
|
||||||
main: li $2, 0x12345678
|
|
||||||
li $3, 0x23456789
|
|
||||||
li $4, 0x87654321
|
|
||||||
li $5, 0x98765432
|
|
||||||
li $8, 0x10000000
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
sltu $15, $2, $2
|
|
||||||
sltu $15, $2, $3
|
|
||||||
sltu $15, $2, $4
|
|
||||||
sltu $15, $2, $5
|
|
||||||
|
|
||||||
sltu $15, $3, $2
|
|
||||||
sltu $15, $3, $3
|
|
||||||
sltu $15, $3, $4
|
|
||||||
sltu $15, $3, $5
|
|
||||||
|
|
||||||
sltu $15, $4, $2
|
|
||||||
sltu $15, $4, $3
|
|
||||||
sltu $15, $4, $4
|
|
||||||
sltu $15, $4, $5
|
|
||||||
|
|
||||||
sltu $15, $5, $2
|
|
||||||
sltu $15, $5, $3
|
|
||||||
sltu $15, $5, $4
|
|
||||||
sltu $15, $5, $5
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
slt $15, $2, $2
|
|
||||||
slt $15, $2, $3
|
|
||||||
slt $15, $2, $4
|
|
||||||
slt $15, $2, $5
|
|
||||||
|
|
||||||
slt $15, $3, $2
|
|
||||||
slt $15, $3, $3
|
|
||||||
slt $15, $3, $4
|
|
||||||
slt $15, $3, $5
|
|
||||||
|
|
||||||
slt $15, $4, $2
|
|
||||||
slt $15, $4, $3
|
|
||||||
slt $15, $4, $4
|
|
||||||
slt $15, $4, $5
|
|
||||||
|
|
||||||
slt $15, $5, $2
|
|
||||||
slt $15, $5, $3
|
|
||||||
slt $15, $5, $4
|
|
||||||
slt $15, $5, $5
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
j main
|
|
||||||
sll $0, $0, 0
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# .ktext 0x80000180
|
|
||||||
.text 0x00410000
|
|
||||||
.globl main
|
|
||||||
|
|
||||||
main: li $2, 0x12345678
|
|
||||||
li $3, 0x23456789
|
|
||||||
li $4, 0x87654321
|
|
||||||
li $5, 0x98765432
|
|
||||||
li $8, 0x10000000
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
sltiu $15, $2, 0x1234
|
|
||||||
sltiu $15, $2, 0x2345
|
|
||||||
sltiu $15, $2, -0x1234
|
|
||||||
sltiu $15, $2, -0x2345
|
|
||||||
|
|
||||||
sltiu $15, $3, 0x1234
|
|
||||||
sltiu $15, $3, 0x2345
|
|
||||||
sltiu $15, $3, -0x1234
|
|
||||||
sltiu $15, $3, -0x2345
|
|
||||||
|
|
||||||
sltiu $15, $4, 0x1234
|
|
||||||
sltiu $15, $4, 0x2345
|
|
||||||
sltiu $15, $4, -0x1234
|
|
||||||
sltiu $15, $4, -0x2345
|
|
||||||
|
|
||||||
sltiu $15, $5, 0x1234
|
|
||||||
sltiu $15, $5, 0x2345
|
|
||||||
sltiu $15, $5, -0x1234
|
|
||||||
sltiu $15, $5, -0x2345
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
slti $15, $2, 0x1234
|
|
||||||
slti $15, $2, 0x2345
|
|
||||||
slti $15, $2, -0x1234
|
|
||||||
slti $15, $2, -0x2345
|
|
||||||
|
|
||||||
slti $15, $3, 0x1234
|
|
||||||
slti $15, $3, 0x2345
|
|
||||||
slti $15, $3, -0x1234
|
|
||||||
slti $15, $3, -0x2345
|
|
||||||
|
|
||||||
slti $15, $4, 0x1234
|
|
||||||
slti $15, $4, 0x2345
|
|
||||||
slti $15, $4, -0x1234
|
|
||||||
slti $15, $4, -0x2345
|
|
||||||
|
|
||||||
slti $15, $5, 0x1234
|
|
||||||
slti $15, $5, 0x2345
|
|
||||||
slti $15, $5, -0x1234
|
|
||||||
slti $15, $5, -0x2345
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
j main
|
|
||||||
sll $0, $0, 0
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
# .ktext 0x80000180
|
|
||||||
.text 0x00410000
|
|
||||||
.globl main
|
|
||||||
|
|
||||||
main: li $2, 0x12345678
|
|
||||||
li $3, 0x23456789
|
|
||||||
li $4, 0x87654321
|
|
||||||
li $5, 0x98765432
|
|
||||||
li $8, 0x10000000
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
subu $15, $2, $2
|
|
||||||
subu $15, $2, $3
|
|
||||||
subu $15, $2, $4
|
|
||||||
subu $15, $2, $5
|
|
||||||
|
|
||||||
subu $15, $3, $2
|
|
||||||
subu $15, $3, $3
|
|
||||||
subu $15, $3, $4
|
|
||||||
subu $15, $3, $5
|
|
||||||
|
|
||||||
subu $15, $4, $2
|
|
||||||
subu $15, $4, $3
|
|
||||||
subu $15, $4, $4
|
|
||||||
subu $15, $4, $5
|
|
||||||
|
|
||||||
subu $15, $5, $2
|
|
||||||
subu $15, $5, $3
|
|
||||||
subu $15, $5, $4
|
|
||||||
subu $15, $5, $5
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
sub $15, $2, $2
|
|
||||||
sub $15, $2, $3
|
|
||||||
sub $15, $2, $4
|
|
||||||
sub $15, $2, $5
|
|
||||||
|
|
||||||
sub $15, $3, $2
|
|
||||||
sub $15, $3, $3
|
|
||||||
sub $15, $3, $4
|
|
||||||
sub $15, $3, $5
|
|
||||||
|
|
||||||
sub $15, $4, $2
|
|
||||||
sub $15, $4, $3
|
|
||||||
sub $15, $4, $4
|
|
||||||
sub $15, $4, $5
|
|
||||||
|
|
||||||
sub $15, $5, $2
|
|
||||||
sub $15, $5, $3
|
|
||||||
sub $15, $5, $4
|
|
||||||
sub $15, $5, $5
|
|
||||||
|
|
||||||
sll $0, $0, 0
|
|
||||||
|
|
||||||
j main
|
|
||||||
sll $0, $0, 0
|
|
||||||
@@ -1,322 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include "utils.h"
|
|
||||||
|
|
||||||
#define NO_ERROR 0x00000000
|
|
||||||
#define ERROR 0x80000000
|
|
||||||
#define IS_ERROR(e) ((e & ERROR) == ERROR)
|
|
||||||
|
|
||||||
#define TEST10_ERROR (ERROR | 0x10)
|
|
||||||
#define TEST11_ERROR (ERROR | 0x11)
|
|
||||||
#define TEST12_ERROR (ERROR | 0x12)
|
|
||||||
|
|
||||||
int fibonacci(int f0, int f1, int *pDst, int len)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
|
|
||||||
pDst[i++] = f0;
|
|
||||||
pDst[i++] = f1;
|
|
||||||
|
|
||||||
for (; i < len; i++)
|
|
||||||
{
|
|
||||||
pDst[i] = pDst[i-2] + pDst[i-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
int StatusRegister_read(void)
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
(
|
|
||||||
".set noreorder\n"
|
|
||||||
"mfc0 $2, $12\n"
|
|
||||||
".set reorder\n"
|
|
||||||
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
int RevisionRegister_read(void)
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
(
|
|
||||||
".set noreorder\n"
|
|
||||||
"mfc0 $2, $15\n"
|
|
||||||
".set reorder\n"
|
|
||||||
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PrintCPUinfo(void)
|
|
||||||
{
|
|
||||||
int result, rev_id;
|
|
||||||
|
|
||||||
char *cpu_type_str[7] = {"invalid", "R2000", "R3000", "R6000", "R4000", "reserved", "R6000A"};
|
|
||||||
|
|
||||||
// Print Status register
|
|
||||||
result = StatusRegister_read();
|
|
||||||
sputs("Status : ");
|
|
||||||
print_word(result);
|
|
||||||
sputs("\r\n");
|
|
||||||
|
|
||||||
// Print Revision
|
|
||||||
result = RevisionRegister_read();
|
|
||||||
rev_id = (result >> 8) & 0xFF;
|
|
||||||
sputs("CPU type: ");
|
|
||||||
if ((rev_id > 0) && (rev_id < 0x07))
|
|
||||||
{
|
|
||||||
sputs(cpu_type_str[rev_id]);
|
|
||||||
sputs(" Rev.");
|
|
||||||
rev_id = result & 0xFF;
|
|
||||||
print_byte((char)rev_id);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sputs("Unknown");
|
|
||||||
|
|
||||||
sputs("\r\n");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int Test10_LoadStore()
|
|
||||||
{
|
|
||||||
int *buf, i, result, data, err;
|
|
||||||
volatile int *pPtr;
|
|
||||||
|
|
||||||
buf = (int*)malloc(32*sizeof(int));
|
|
||||||
while(1)
|
|
||||||
{
|
|
||||||
err = TEST10_ERROR;
|
|
||||||
// Basic Load/Store
|
|
||||||
pPtr = buf;
|
|
||||||
*pPtr++ = 0x00000000;
|
|
||||||
*pPtr++ = 0x55555555;
|
|
||||||
*pPtr++ = 0xAAAAAAAA;
|
|
||||||
*pPtr++ = 0xFFFFFFFF;
|
|
||||||
pPtr = buf;
|
|
||||||
if (*pPtr++ != 0x00000000)
|
|
||||||
break;
|
|
||||||
if (*pPtr++ != 0x55555555)
|
|
||||||
break;
|
|
||||||
if (*pPtr++ != 0xAAAAAAAA)
|
|
||||||
break;
|
|
||||||
if (*pPtr++ != 0xFFFFFFFF)
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Filling from left
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0x00000000;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
*pPtr++ = data;
|
|
||||||
data = data >> 1 | 0x80000000;
|
|
||||||
|
|
||||||
}
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0x00000000;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (*pPtr++ != data)
|
|
||||||
break;
|
|
||||||
|
|
||||||
data = data >> 1 | 0x80000000;
|
|
||||||
}
|
|
||||||
if (i != 32)
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Filling from right
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0x00000000;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
*pPtr++ = data;
|
|
||||||
data = data << 1 | 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0x00000000;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (*pPtr++ != data)
|
|
||||||
break;
|
|
||||||
|
|
||||||
data = data << 1 | 1;
|
|
||||||
}
|
|
||||||
if (i != 32)
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Walking ones
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0x00000001;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
*pPtr++ = data;
|
|
||||||
data = data << 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0x00000001;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (*pPtr++ != data)
|
|
||||||
break;
|
|
||||||
|
|
||||||
data = data << 1;
|
|
||||||
}
|
|
||||||
if (i != 32)
|
|
||||||
break;
|
|
||||||
|
|
||||||
// Walking zeros
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0xFFFFFFFE;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
*pPtr++ = data;
|
|
||||||
data = data << 1 | 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
pPtr = buf;
|
|
||||||
data = 0xFFFFFFFE;
|
|
||||||
for (i=0; i < 32; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (*pPtr++ != data)
|
|
||||||
break;
|
|
||||||
|
|
||||||
data = data << 1 | 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (i != 32)
|
|
||||||
break;
|
|
||||||
|
|
||||||
err = NO_ERROR;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
free(buf);
|
|
||||||
return err;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define NUM_ELEMENTS 20
|
|
||||||
#define NUM_RUNS 3
|
|
||||||
int Test11_AddSub()
|
|
||||||
{
|
|
||||||
int buf[NUM_ELEMENTS], result, i, j, diff, fill, num_right_elements, num_right_runs;
|
|
||||||
|
|
||||||
fill = 0xAAAAAAAA;
|
|
||||||
|
|
||||||
num_right_runs = 0;
|
|
||||||
|
|
||||||
for (i=0; i < NUM_RUNS; i++)
|
|
||||||
{
|
|
||||||
for (j=0; j < NUM_ELEMENTS; j++)
|
|
||||||
buf[j] = fill;
|
|
||||||
|
|
||||||
fill = ((fill ^ i) - 1) << 1;
|
|
||||||
num_right_elements = 2;
|
|
||||||
result = fibonacci(i, i+1, buf, NUM_ELEMENTS);
|
|
||||||
for (j=2; j < NUM_ELEMENTS; j++)
|
|
||||||
{
|
|
||||||
diff = buf[j] - buf[j-1];
|
|
||||||
if (diff == buf[j-2])
|
|
||||||
num_right_elements++;
|
|
||||||
}
|
|
||||||
if (num_right_elements == NUM_ELEMENTS)
|
|
||||||
num_right_runs++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num_right_runs != NUM_RUNS)
|
|
||||||
return TEST11_ERROR;
|
|
||||||
|
|
||||||
return NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Test12_MulDiv()
|
|
||||||
{
|
|
||||||
int mix, i, j;
|
|
||||||
int s1, s2, sp, st;
|
|
||||||
div_t div_res;
|
|
||||||
|
|
||||||
srand(0x19701031);
|
|
||||||
for (i=0; i < 100; i++)
|
|
||||||
{
|
|
||||||
for (j=1; j < 1000; j++)
|
|
||||||
{
|
|
||||||
mix = (int)rand();
|
|
||||||
mix = (mix << 8) ^ (mix << 16);
|
|
||||||
s1 = (int)rand() ^ mix;
|
|
||||||
mix = (int)rand();
|
|
||||||
mix = (mix << 8) ^ (mix << 16);
|
|
||||||
s2 = (int)rand() ^ mix;
|
|
||||||
|
|
||||||
div_res = div(s1, s2);
|
|
||||||
|
|
||||||
sp = s2*div_res.quot;
|
|
||||||
st = div_res.rem + sp;
|
|
||||||
if (st != s1)
|
|
||||||
return TEST12_ERROR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NO_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
int result, i, j, cnt;
|
|
||||||
volatile char *pUART_baud = (char*)0x80000009;
|
|
||||||
volatile int *pReg = (int*)0x80000000;
|
|
||||||
volatile int *pReg_usec = (int*)0x80000010;
|
|
||||||
volatile int *pReg_sec = (int*)0x80000014;
|
|
||||||
time_t clock;
|
|
||||||
struct tm *pDate;
|
|
||||||
// *pUART_baud = 0x35/4;
|
|
||||||
|
|
||||||
PrintCPUinfo();
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
// *pReg_sec = 0x12345678;
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
*pReg = cnt & 0x3FFFFFFF;
|
|
||||||
|
|
||||||
result = Test10_LoadStore();
|
|
||||||
if (IS_ERROR(result))
|
|
||||||
break;
|
|
||||||
|
|
||||||
result = Test11_AddSub();
|
|
||||||
if (IS_ERROR(result))
|
|
||||||
break;
|
|
||||||
|
|
||||||
result = Test12_MulDiv();
|
|
||||||
if (IS_ERROR(result))
|
|
||||||
break;
|
|
||||||
|
|
||||||
// printf("Iteration %d: Passed\r\n", cnt++);
|
|
||||||
sputs("Iteration ");
|
|
||||||
print_word(cnt++);
|
|
||||||
sputs(": Passed\r\n");
|
|
||||||
|
|
||||||
clock = time(NULL);
|
|
||||||
pDate = gmtime(&clock);
|
|
||||||
print_byte(pDate->tm_hour);
|
|
||||||
sputs(":");
|
|
||||||
print_byte(pDate->tm_min);
|
|
||||||
sputs(":");
|
|
||||||
print_byte(pDate->tm_sec);
|
|
||||||
sputs("\r\n");
|
|
||||||
}
|
|
||||||
*pReg = 0x40000000 | cnt;
|
|
||||||
sputs("Failed with error ");
|
|
||||||
print_word(result);
|
|
||||||
sputs(" \r\n");
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,924 +0,0 @@
|
|||||||
.file 1 "testbench.c"
|
|
||||||
.set nobopt
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl fibonacci
|
|
||||||
.ent fibonacci
|
|
||||||
fibonacci:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $8,2 # 0x2
|
|
||||||
slt $2,$8,$7
|
|
||||||
sw $4,0($6)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L7
|
|
||||||
sw $5,4($6)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $6,$6,8
|
|
||||||
$L5:
|
|
||||||
lw $2,-8($6)
|
|
||||||
lw $3,-4($6)
|
|
||||||
addiu $8,$8,1
|
|
||||||
addu $2,$2,$3
|
|
||||||
slt $4,$8,$7
|
|
||||||
sw $2,0($6)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$0,$L5
|
|
||||||
addiu $6,$6,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L7:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
move $2,$8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end fibonacci
|
|
||||||
.align 2
|
|
||||||
.globl StatusRegister_read
|
|
||||||
.ent StatusRegister_read
|
|
||||||
StatusRegister_read:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
#APP
|
|
||||||
.set noreorder
|
|
||||||
mfc0 $2, $12
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
#NO_APP
|
|
||||||
j $31
|
|
||||||
.end StatusRegister_read
|
|
||||||
.align 2
|
|
||||||
.globl RevisionRegister_read
|
|
||||||
.ent RevisionRegister_read
|
|
||||||
RevisionRegister_read:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
#APP
|
|
||||||
.set noreorder
|
|
||||||
mfc0 $2, $15
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
#NO_APP
|
|
||||||
j $31
|
|
||||||
.end RevisionRegister_read
|
|
||||||
.section .rodata.str1.4,"aMS",@progbits,1
|
|
||||||
.align 2
|
|
||||||
$LC0:
|
|
||||||
.ascii "invalid\000"
|
|
||||||
.align 2
|
|
||||||
$LC1:
|
|
||||||
.ascii "R2000\000"
|
|
||||||
.align 2
|
|
||||||
$LC2:
|
|
||||||
.ascii "R3000\000"
|
|
||||||
.align 2
|
|
||||||
$LC3:
|
|
||||||
.ascii "R6000\000"
|
|
||||||
.align 2
|
|
||||||
$LC4:
|
|
||||||
.ascii "R4000\000"
|
|
||||||
.align 2
|
|
||||||
$LC5:
|
|
||||||
.ascii "reserved\000"
|
|
||||||
.align 2
|
|
||||||
$LC6:
|
|
||||||
.ascii "R6000A\000"
|
|
||||||
.rdata
|
|
||||||
.align 2
|
|
||||||
$LC7:
|
|
||||||
.word $LC0
|
|
||||||
.word $LC1
|
|
||||||
.word $LC2
|
|
||||||
.word $LC3
|
|
||||||
.word $LC4
|
|
||||||
.word $LC5
|
|
||||||
.word $LC6
|
|
||||||
.section .rodata.str1.4
|
|
||||||
.align 2
|
|
||||||
$LC8:
|
|
||||||
.ascii "Status : \000"
|
|
||||||
.align 2
|
|
||||||
$LC9:
|
|
||||||
.ascii "\r\n\000"
|
|
||||||
.align 2
|
|
||||||
$LC10:
|
|
||||||
.ascii "CPU type: \000"
|
|
||||||
.align 2
|
|
||||||
$LC12:
|
|
||||||
.ascii "Unknown\000"
|
|
||||||
.align 2
|
|
||||||
$LC11:
|
|
||||||
.ascii " Rev.\000"
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl PrintCPUinfo
|
|
||||||
.ent PrintCPUinfo
|
|
||||||
PrintCPUinfo:
|
|
||||||
.frame $sp,64,$31 # vars= 32, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
lw $2,$LC7
|
|
||||||
addiu $sp,$sp,-64
|
|
||||||
lw $3,$LC7+4
|
|
||||||
sw $2,16($sp)
|
|
||||||
lw $2,$LC7+8
|
|
||||||
sw $3,20($sp)
|
|
||||||
sw $2,24($sp)
|
|
||||||
lw $3,$LC7+12
|
|
||||||
lw $2,$LC7+16
|
|
||||||
sw $3,28($sp)
|
|
||||||
sw $2,32($sp)
|
|
||||||
lw $3,$LC7+20
|
|
||||||
lw $2,$LC7+24
|
|
||||||
sw $3,36($sp)
|
|
||||||
sw $31,56($sp)
|
|
||||||
sw $17,52($sp)
|
|
||||||
sw $16,48($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal StatusRegister_read
|
|
||||||
sw $2,40($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $17,$2
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC9
|
|
||||||
jal sputs
|
|
||||||
jal RevisionRegister_read
|
|
||||||
sra $16,$2,8
|
|
||||||
andi $16,$16,0xff
|
|
||||||
la $4,$LC10
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
move $17,$2
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $3,$16,2
|
|
||||||
addiu $16,$16,-1
|
|
||||||
sltu $16,$16,6
|
|
||||||
la $4,$LC12
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $16,$0,$L12
|
|
||||||
addu $2,$sp,$3
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $4,16($2)
|
|
||||||
jal sputs
|
|
||||||
la $4,$LC11
|
|
||||||
jal sputs
|
|
||||||
sll $4,$17,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_byte
|
|
||||||
sra $4,$4,24
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC9
|
|
||||||
jal sputs
|
|
||||||
lw $31,56($sp)
|
|
||||||
lw $17,52($sp)
|
|
||||||
lw $16,48($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,64
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L12:
|
|
||||||
jal sputs
|
|
||||||
la $4,$LC9
|
|
||||||
jal sputs
|
|
||||||
lw $31,56($sp)
|
|
||||||
lw $17,52($sp)
|
|
||||||
lw $16,48($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,64
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end PrintCPUinfo
|
|
||||||
.align 2
|
|
||||||
.globl Test10_LoadStore
|
|
||||||
.ent Test10_LoadStore
|
|
||||||
Test10_LoadStore:
|
|
||||||
.frame $sp,24,$31 # vars= 0, regs= 2/0, args= 16, gp= 0
|
|
||||||
.mask 0x80010000,-4
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-24
|
|
||||||
li $4,128 # 0x80
|
|
||||||
sw $31,20($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal malloc
|
|
||||||
sw $16,16($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $4,$2
|
|
||||||
li $2,1431633920 # 0x55550000
|
|
||||||
li $3,-1431699456 # 0xffffffffaaaa0000
|
|
||||||
ori $5,$2,0x5555
|
|
||||||
ori $6,$3,0xaaaa
|
|
||||||
li $7,-1 # 0xffffffffffffffff
|
|
||||||
sw $0,0($4)
|
|
||||||
sw $5,4($4)
|
|
||||||
sw $6,8($4)
|
|
||||||
sw $7,12($4)
|
|
||||||
lw $3,0($4)
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $3,$0,$L16
|
|
||||||
ori $16,$2,0x10
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $2,4($4)
|
|
||||||
beq $2,$5,$L73
|
|
||||||
$L16:
|
|
||||||
jal free
|
|
||||||
move $2,$16
|
|
||||||
lw $31,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,24
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L73:
|
|
||||||
lw $2,8($4)
|
|
||||||
bne $2,$6,$L16
|
|
||||||
lw $2,12($4)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$7,$L16
|
|
||||||
move $3,$4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $5,$0
|
|
||||||
li $7,-2147483648 # 0xffffffff80000000
|
|
||||||
li $6,31 # 0x1f
|
|
||||||
$L24:
|
|
||||||
sra $2,$5,1
|
|
||||||
addiu $6,$6,-1
|
|
||||||
sw $5,0($3)
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L24
|
|
||||||
or $5,$2,$7
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $3,$4
|
|
||||||
move $5,$0
|
|
||||||
move $6,$0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L29
|
|
||||||
li $8,-2147483648 # 0xffffffff80000000
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L74:
|
|
||||||
addiu $6,$6,1
|
|
||||||
slt $2,$6,32
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L26
|
|
||||||
or $5,$7,$8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L29:
|
|
||||||
lw $2,0($3)
|
|
||||||
sra $7,$5,1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$5,$L74
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L26:
|
|
||||||
li $2,32 # 0x20
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $6,$2,$L16
|
|
||||||
move $3,$4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $5,$0
|
|
||||||
li $6,31 # 0x1f
|
|
||||||
$L34:
|
|
||||||
sll $2,$5,1
|
|
||||||
addiu $6,$6,-1
|
|
||||||
sw $5,0($3)
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L34
|
|
||||||
ori $5,$2,0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $3,$4
|
|
||||||
move $5,$0
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L39
|
|
||||||
move $6,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L75:
|
|
||||||
addiu $6,$6,1
|
|
||||||
slt $2,$6,32
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L36
|
|
||||||
ori $5,$7,0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L39:
|
|
||||||
lw $2,0($3)
|
|
||||||
sll $7,$5,1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$5,$L75
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L36:
|
|
||||||
li $2,32 # 0x20
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $6,$2,$L16
|
|
||||||
move $3,$4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $5,1 # 0x1
|
|
||||||
li $6,31 # 0x1f
|
|
||||||
$L44:
|
|
||||||
addiu $6,$6,-1
|
|
||||||
sw $5,0($3)
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L44
|
|
||||||
sll $5,$5,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $3,$4
|
|
||||||
li $5,1 # 0x1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L49
|
|
||||||
move $6,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L76:
|
|
||||||
addiu $6,$6,1
|
|
||||||
slt $2,$6,32
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L46
|
|
||||||
sll $5,$5,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L49:
|
|
||||||
lw $2,0($3)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$5,$L76
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L46:
|
|
||||||
li $2,32 # 0x20
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $6,$2,$L16
|
|
||||||
move $3,$4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $5,-2 # 0xfffffffffffffffe
|
|
||||||
li $6,31 # 0x1f
|
|
||||||
$L54:
|
|
||||||
sll $2,$5,1
|
|
||||||
addiu $6,$6,-1
|
|
||||||
sw $5,0($3)
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L54
|
|
||||||
ori $5,$2,0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
move $3,$4
|
|
||||||
li $5,-2 # 0xfffffffffffffffe
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L59
|
|
||||||
move $6,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L77:
|
|
||||||
addiu $6,$6,1
|
|
||||||
slt $2,$6,32
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$0,$L56
|
|
||||||
ori $5,$7,0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L59:
|
|
||||||
lw $2,0($3)
|
|
||||||
sll $7,$5,1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$5,$L77
|
|
||||||
addiu $3,$3,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L56:
|
|
||||||
li $2,32 # 0x20
|
|
||||||
bne $6,$2,$L16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L16
|
|
||||||
move $16,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end Test10_LoadStore
|
|
||||||
.align 2
|
|
||||||
.globl Test11_AddSub
|
|
||||||
.ent Test11_AddSub
|
|
||||||
Test11_AddSub:
|
|
||||||
.frame $sp,120,$31 # vars= 80, regs= 5/0, args= 16, gp= 0
|
|
||||||
.mask 0x800f0000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-120
|
|
||||||
li $2,-1431699456 # 0xffffffffaaaa0000
|
|
||||||
sw $19,108($sp)
|
|
||||||
sw $18,104($sp)
|
|
||||||
sw $16,96($sp)
|
|
||||||
sw $31,112($sp)
|
|
||||||
sw $17,100($sp)
|
|
||||||
ori $16,$2,0xaaaa
|
|
||||||
move $19,$0
|
|
||||||
move $4,$0
|
|
||||||
addiu $18,$sp,16
|
|
||||||
$L92:
|
|
||||||
move $2,$18
|
|
||||||
li $6,19 # 0x13
|
|
||||||
$L85:
|
|
||||||
addiu $6,$6,-1
|
|
||||||
sw $16,0($2)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L85
|
|
||||||
addiu $2,$2,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
xor $2,$16,$4
|
|
||||||
addiu $17,$4,1
|
|
||||||
addiu $2,$2,-1
|
|
||||||
move $5,$17
|
|
||||||
addiu $6,$sp,16
|
|
||||||
li $7,20 # 0x14
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal fibonacci
|
|
||||||
sll $16,$2,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $7,2 # 0x2
|
|
||||||
addiu $5,$18,8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L90
|
|
||||||
li $6,17 # 0x11
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L88:
|
|
||||||
bltz $6,$L100
|
|
||||||
$L90:
|
|
||||||
lw $2,0($5)
|
|
||||||
lw $3,-4($5)
|
|
||||||
lw $4,-8($5)
|
|
||||||
subu $2,$2,$3
|
|
||||||
addiu $6,$6,-1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$2,$L88
|
|
||||||
addiu $5,$5,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $6,$L90
|
|
||||||
addiu $7,$7,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L100:
|
|
||||||
li $6,20 # 0x14
|
|
||||||
beq $7,$6,$L101
|
|
||||||
$L81:
|
|
||||||
slt $2,$17,3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L92
|
|
||||||
move $4,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $2,3 # 0x3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $19,$2,$L102
|
|
||||||
move $3,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,112($sp)
|
|
||||||
lw $19,108($sp)
|
|
||||||
lw $18,104($sp)
|
|
||||||
lw $17,100($sp)
|
|
||||||
lw $16,96($sp)
|
|
||||||
move $2,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,120
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L101:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L81
|
|
||||||
addiu $19,$19,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L102:
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $3,$2,0x11
|
|
||||||
lw $31,112($sp)
|
|
||||||
lw $19,108($sp)
|
|
||||||
lw $18,104($sp)
|
|
||||||
lw $17,100($sp)
|
|
||||||
lw $16,96($sp)
|
|
||||||
move $2,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,120
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end Test11_AddSub
|
|
||||||
.align 2
|
|
||||||
.globl Test12_MulDiv
|
|
||||||
.ent Test12_MulDiv
|
|
||||||
Test12_MulDiv:
|
|
||||||
.frame $sp,48,$31 # vars= 8, regs= 5/0, args= 16, gp= 0
|
|
||||||
.mask 0x800f0000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $4,426770432 # 0x19700000
|
|
||||||
addiu $sp,$sp,-48
|
|
||||||
ori $4,$4,0x1031
|
|
||||||
sw $19,36($sp)
|
|
||||||
sw $31,40($sp)
|
|
||||||
sw $18,32($sp)
|
|
||||||
sw $17,28($sp)
|
|
||||||
sw $16,24($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal srand
|
|
||||||
move $19,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L111
|
|
||||||
li $18,1 # 0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L109:
|
|
||||||
beq $4,$0,$L117
|
|
||||||
$L111:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
addiu $18,$18,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $3,$2,16
|
|
||||||
sll $2,$2,8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
xor $16,$2,$3
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
xor $17,$2,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
sll $3,$2,16
|
|
||||||
sll $2,$2,8
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal rand
|
|
||||||
xor $16,$2,$3
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
xor $16,$2,$16
|
|
||||||
addiu $4,$sp,16
|
|
||||||
move $5,$17
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal div
|
|
||||||
move $6,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $3,16($sp)
|
|
||||||
lw $2,20($sp)
|
|
||||||
mult $3,$16
|
|
||||||
mflo $3
|
|
||||||
addu $2,$2,$3
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
beq $2,$17,$L109
|
|
||||||
slt $4,$18,1000
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $2,$2,0x12
|
|
||||||
$L103:
|
|
||||||
lw $31,40($sp)
|
|
||||||
lw $19,36($sp)
|
|
||||||
lw $18,32($sp)
|
|
||||||
lw $17,28($sp)
|
|
||||||
lw $16,24($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,48
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L117:
|
|
||||||
addiu $19,$19,1
|
|
||||||
slt $2,$19,100
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $2,$0,$L111
|
|
||||||
li $18,1 # 0x1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L103
|
|
||||||
move $2,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end Test12_MulDiv
|
|
||||||
.section .rodata.str1.4
|
|
||||||
.align 2
|
|
||||||
$LC13:
|
|
||||||
.ascii "Iteration %d: Passed\r\n\000"
|
|
||||||
.align 2
|
|
||||||
$LC14:
|
|
||||||
.ascii "Iteration \000"
|
|
||||||
.align 2
|
|
||||||
$LC15:
|
|
||||||
.ascii ": Passed\r\n\000"
|
|
||||||
.align 2
|
|
||||||
$LC16:
|
|
||||||
.ascii ":\000"
|
|
||||||
.align 2
|
|
||||||
$LC17:
|
|
||||||
.ascii "Failed with error \000"
|
|
||||||
.align 2
|
|
||||||
$LC18:
|
|
||||||
.ascii " \r\n\000"
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl main
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame $sp,48,$31 # vars= 8, regs= 5/0, args= 16, gp= 0
|
|
||||||
.mask 0x800f0000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $3,-2147483648 # 0xffffffff80000000
|
|
||||||
li $2,13
|
|
||||||
ori $3,$3,0x9
|
|
||||||
addiu $sp,$sp,-48
|
|
||||||
sb $2,0($3)
|
|
||||||
sw $19,36($sp)
|
|
||||||
sw $18,32($sp)
|
|
||||||
sw $17,28($sp)
|
|
||||||
sw $31,40($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal PrintCPUinfo
|
|
||||||
sw $16,24($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
li $2,1073676288 # 0x3fff0000
|
|
||||||
ori $19,$2,0xffff
|
|
||||||
li $18,-2147483648 # 0xffffffff80000000
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L119
|
|
||||||
move $17,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L124:
|
|
||||||
jal Test11_AddSub
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bltz $2,$L120
|
|
||||||
move $16,$2
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
jal Test12_MulDiv
|
|
||||||
move $16,$2
|
|
||||||
la $4,$LC13
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bltz $2,$L120
|
|
||||||
move $5,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal printf
|
|
||||||
addiu $17,$17,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC14
|
|
||||||
jal sputs
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC15
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal sputs
|
|
||||||
addiu $17,$17,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal time
|
|
||||||
move $4,$0
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $4,$sp,16
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal gmtime
|
|
||||||
sw $2,16($sp)
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lb $4,8($2)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_byte
|
|
||||||
move $16,$2
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC16
|
|
||||||
jal sputs
|
|
||||||
lb $4,4($16)
|
|
||||||
jal print_byte
|
|
||||||
la $4,$LC16
|
|
||||||
jal sputs
|
|
||||||
lb $4,0($16)
|
|
||||||
jal print_byte
|
|
||||||
la $4,$LC9
|
|
||||||
jal sputs
|
|
||||||
$L119:
|
|
||||||
and $2,$17,$19
|
|
||||||
sw $2,0($18)
|
|
||||||
jal Test10_LoadStore
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $2,$L124
|
|
||||||
move $16,$2
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L120:
|
|
||||||
li $2,1073741824 # 0x40000000
|
|
||||||
or $2,$17,$2
|
|
||||||
la $4,$LC17
|
|
||||||
sw $2,0($18)
|
|
||||||
jal sputs
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_word
|
|
||||||
move $4,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
la $4,$LC18
|
|
||||||
jal sputs
|
|
||||||
lw $31,40($sp)
|
|
||||||
lw $19,36($sp)
|
|
||||||
lw $18,32($sp)
|
|
||||||
lw $17,28($sp)
|
|
||||||
lw $16,24($sp)
|
|
||||||
li $2,1 # 0x1
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,48
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end main
|
|
||||||
@@ -1,179 +0,0 @@
|
|||||||
#include <sys/times.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
char readchar(void)
|
|
||||||
{
|
|
||||||
volatile char *pUART_stat = (char*)0x80000008;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
|
|
||||||
while(!(0x10 & *pUART_stat));
|
|
||||||
|
|
||||||
return *pUART_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void writechar(char c)
|
|
||||||
{
|
|
||||||
volatile char *pUART_stat = (char*)0x80000008;
|
|
||||||
volatile char *pUART_data = (char*)0x80000004;
|
|
||||||
|
|
||||||
while((0x02 & *pUART_stat) != 0);
|
|
||||||
|
|
||||||
*pUART_data = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
clock_t times(struct tms *buffer)
|
|
||||||
{
|
|
||||||
volatile long *pReg_usec = (long*)0x80000010;
|
|
||||||
volatile long *pReg_sec = (long*)0x80000014;
|
|
||||||
long sec;
|
|
||||||
|
|
||||||
sec = *pReg_sec;
|
|
||||||
|
|
||||||
if (buffer)
|
|
||||||
{
|
|
||||||
buffer->tms_utime = sec;
|
|
||||||
buffer->tms_stime = 0;
|
|
||||||
buffer->tms_cutime = 0;
|
|
||||||
buffer->tms_cstime = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (clock_t)sec;
|
|
||||||
}
|
|
||||||
|
|
||||||
int gettimeofday(struct timeval *tp, void *tzp)
|
|
||||||
{
|
|
||||||
volatile long *pReg_usec = (long*)0x80000010;
|
|
||||||
volatile long *pReg_sec = (long*)0x80000014;
|
|
||||||
|
|
||||||
if (tp)
|
|
||||||
{
|
|
||||||
tp->tv_sec = *pReg_sec;
|
|
||||||
tp->tv_usec = *pReg_usec;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int settimeofday(const struct timeval *tp, const struct timezone *tzp)
|
|
||||||
{
|
|
||||||
volatile long *pReg_usec = (long*)0x80000010;
|
|
||||||
volatile long *pReg_sec = (long*)0x80000014;
|
|
||||||
div_t res;
|
|
||||||
|
|
||||||
res = div(tp->tv_usec, 1E6);
|
|
||||||
|
|
||||||
if (tp)
|
|
||||||
{
|
|
||||||
*pReg_usec = res.rem;
|
|
||||||
*pReg_sec = tp->tv_sec + res.quot;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
caddr_t sbrk(int incr)
|
|
||||||
{
|
|
||||||
extern char end;
|
|
||||||
static char *heap_end;
|
|
||||||
char *prev_heap_end;
|
|
||||||
|
|
||||||
if (heap_end == 0)
|
|
||||||
heap_end = &end;
|
|
||||||
|
|
||||||
prev_heap_end = heap_end;
|
|
||||||
// if (heap_end + incr > stack_ptr)
|
|
||||||
// {
|
|
||||||
// _write(1, "Heap and stack collision\n", 25);
|
|
||||||
// abort();
|
|
||||||
// }
|
|
||||||
|
|
||||||
heap_end += incr;
|
|
||||||
return (caddr_t) prev_heap_end;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fstat(int file, struct stat *st)
|
|
||||||
{
|
|
||||||
st->st_mode = S_IFCHR;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int lseek(int file, int ptr, int dir)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int open(const char *name, int flags, int mode)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int close(int file)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int read(int file, char *ptr, int len)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int write(int file, char *ptr, int len)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i=0; i < len; i++)
|
|
||||||
writechar(*ptr++);
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
int isatty(int file)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sputs(char *pStr)
|
|
||||||
{
|
|
||||||
char *start;
|
|
||||||
start = pStr;
|
|
||||||
|
|
||||||
while(*pStr)
|
|
||||||
writechar(*(pStr++));
|
|
||||||
|
|
||||||
return pStr - start;
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_byte(char byte)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char c, nibble;
|
|
||||||
|
|
||||||
for (i=0; i < 2; i++)
|
|
||||||
{
|
|
||||||
nibble = (char)((byte >> 4) & 0xF);
|
|
||||||
byte <<= 4;
|
|
||||||
|
|
||||||
if (nibble < 10)
|
|
||||||
c = nibble + '0';
|
|
||||||
else
|
|
||||||
c = nibble + 'A' - 10;
|
|
||||||
|
|
||||||
writechar(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_word(int word)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
unsigned char c, nibble;
|
|
||||||
|
|
||||||
for (i=0; i < 4; i++)
|
|
||||||
{
|
|
||||||
c = (char) (word >> 24);
|
|
||||||
print_byte(c);
|
|
||||||
word <<= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#ifndef UTILS_H
|
|
||||||
#define UTILS_H
|
|
||||||
|
|
||||||
char readchar(void);
|
|
||||||
void writechar(char c);
|
|
||||||
int write(int file, char *ptr, int len);
|
|
||||||
int sputs(char *pStr);
|
|
||||||
void print_byte(char byte);
|
|
||||||
void print_word(int word);
|
|
||||||
|
|
||||||
#endif // UTILS_H
|
|
||||||
|
|
||||||
@@ -1,184 +0,0 @@
|
|||||||
.file 1 "utils.c"
|
|
||||||
.set nobopt
|
|
||||||
.text
|
|
||||||
.align 2
|
|
||||||
.globl sein
|
|
||||||
.ent sein
|
|
||||||
sein:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
ori $4,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L2:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x10
|
|
||||||
beq $2,$0,$L2
|
|
||||||
lbu $2,0($4)
|
|
||||||
sll $2,$2,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
sra $2,$2,24
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sein
|
|
||||||
.align 2
|
|
||||||
.globl saus
|
|
||||||
.ent saus
|
|
||||||
saus:
|
|
||||||
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
|
|
||||||
.mask 0x00000000,0
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
li $2,-2147483648 # 0xffffffff80000000
|
|
||||||
sll $4,$4,24
|
|
||||||
sra $4,$4,24
|
|
||||||
ori $5,$2,0x4
|
|
||||||
ori $3,$2,0x8
|
|
||||||
$L6:
|
|
||||||
lbu $2,0($3)
|
|
||||||
andi $2,$2,0x2
|
|
||||||
bne $2,$0,$L6
|
|
||||||
sb $4,0($5)
|
|
||||||
j $31
|
|
||||||
.end saus
|
|
||||||
.align 2
|
|
||||||
.globl sputs
|
|
||||||
.ent sputs
|
|
||||||
sputs:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
lb $4,0($4)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $L14
|
|
||||||
move $17,$16
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
$L15:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal saus
|
|
||||||
addiu $16,$16,1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lb $4,0($16)
|
|
||||||
$L14:
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $4,$0,$L15
|
|
||||||
subu $2,$16,$17
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end sputs
|
|
||||||
.align 2
|
|
||||||
.globl print_byte
|
|
||||||
.ent print_byte
|
|
||||||
print_byte:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $16,16($sp)
|
|
||||||
sll $16,$4,24
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
sra $16,$16,24
|
|
||||||
li $17,1 # 0x1
|
|
||||||
sra $2,$16,4
|
|
||||||
$L25:
|
|
||||||
andi $5,$2,0xf
|
|
||||||
sll $2,$16,4
|
|
||||||
sll $16,$2,24
|
|
||||||
sltu $3,$5,10
|
|
||||||
addiu $17,$17,-1
|
|
||||||
sra $16,$16,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bne $3,$0,$L21
|
|
||||||
addiu $4,$5,48
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
addiu $4,$5,55
|
|
||||||
$L21:
|
|
||||||
jal saus
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L25
|
|
||||||
sra $2,$16,4
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_byte
|
|
||||||
.align 2
|
|
||||||
.globl print_word
|
|
||||||
.ent print_word
|
|
||||||
print_word:
|
|
||||||
.frame $sp,32,$31 # vars= 0, regs= 3/0, args= 16, gp= 0
|
|
||||||
.mask 0x80030000,-8
|
|
||||||
.fmask 0x00000000,0
|
|
||||||
addiu $sp,$sp,-32
|
|
||||||
sw $17,20($sp)
|
|
||||||
sw $16,16($sp)
|
|
||||||
sw $31,24($sp)
|
|
||||||
move $16,$4
|
|
||||||
li $17,3 # 0x3
|
|
||||||
$L30:
|
|
||||||
sra $4,$16,24
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
jal print_byte
|
|
||||||
addiu $17,$17,-1
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
bgez $17,$L30
|
|
||||||
sll $16,$16,8
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
lw $31,24($sp)
|
|
||||||
lw $17,20($sp)
|
|
||||||
lw $16,16($sp)
|
|
||||||
.set noreorder
|
|
||||||
.set nomacro
|
|
||||||
j $31
|
|
||||||
addiu $sp,$sp,32
|
|
||||||
.set macro
|
|
||||||
.set reorder
|
|
||||||
|
|
||||||
.end print_word
|
|
||||||
Reference in New Issue
Block a user