diff --git a/cMIPS/tests/mul.expected b/cMIPS/tests/mul.expected new file mode 100644 index 0000000000000000000000000000000000000000..9766475a4185a151dc9d56d614ffb9aaea3bfd42 --- /dev/null +++ b/cMIPS/tests/mul.expected @@ -0,0 +1 @@ +ok diff --git a/cMIPS/tests/mul.s b/cMIPS/tests/mul.s new file mode 100644 index 0000000000000000000000000000000000000000..2a40a39312025d494c4e889ca7b2c4bdb974ea8c --- /dev/null +++ b/cMIPS/tests/mul.s @@ -0,0 +1,148 @@ + ## + ## test instruction MUL: R[rd] <= R[rs] * R[rt] + ## + .include "cMIPS.s" + .text + .align 2 + .set noat + .globl _start + .ent _start +_start: la $20, x_IO_BASE_ADDR + + ## + ## let's check the simple ones: 1*5, 5*1, 1*0, 0*1 + ## + + li $3, 1 + li $4, 5 + li $5, (5*1) + mul $6, $4, $3 + li $30, '1' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, 5 + li $4, 1 + li $5, (5*1) + mul $6, $4, $3 + li $30, '2' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, 1 + li $4, 0 + li $5, (1*0) + mul $6, $4, $3 + li $30, '3' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, 0 + li $4, 1 + li $5, (0*1) + mul $6, $4, $3 + li $30, '4' + #sw $6, 0($20) + + bne $5, $6, error + nop + + ## + ## let's check the limits: 1*ffff.ffff, ffff.ffff*1 + ## + li $3, 1 + li $4, -1 + li $5, (-1*1) + mul $6, $4, $3 + li $30, '5' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, -1 + li $4, 1 + li $5, (-1*1) + mul $6, $4, $3 + li $30, '6' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, 2 + li $4, -1 + li $5, (2 * -1) + mul $6, $4, $3 + li $30, '7' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, -1 + li $4, 2 + li $5, (-1 * 2) + mul $6, $4, $3 + li $30, '8' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, -1 + li $4, -1 + li $5, (-1 * -1) + mul $6, $4, $3 + li $30, '9' + #sw $6, 0($20) + + bne $5, $6, error + nop + + li $3, -1 + li $4, -1 + li $5, (-1 * -1) + mul $6, $4, $3 + li $30, 'a' + #sw $6, 0($20) + + bne $5, $6, error + nop + + +ok: li $19, 'o' + sw $19, x_IO_ADDR_RANGE($20) + li $19, 'k' + sw $19, x_IO_ADDR_RANGE($20) + li $19, '\n' + sw $19, x_IO_ADDR_RANGE($20) + + j _end + +error: + li $19, 'e' + sw $19, x_IO_ADDR_RANGE($20) + li $19, 'r' + sw $19, x_IO_ADDR_RANGE($20) + sw $19, x_IO_ADDR_RANGE($20) + sw $30, x_IO_ADDR_RANGE($20) + li $19, '\n' + sw $19, x_IO_ADDR_RANGE($20) + + +_end: nop + nop + nop + nop + wait + nop + .end _start + +