-
Notifications
You must be signed in to change notification settings - Fork 0
/
g2-test.asm
121 lines (98 loc) · 1.84 KB
/
g2-test.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# after execution, register bank should contain
#
# $1 = 0x1
# $2 = 0x2
# $3 = 0x3
# $4 = 0x1
# $5 = 0x2
# $6 = 0x2
# $31 != 0x0 (some instruction address)
#
# all other registers should be zero
#####
# simple test of j, jr, jal
# includes lots of nops to make sure errors do not occur from forwarding/stalling/flushing
j l0
nop
addiu $30, $30, 0x1 # $30 != 0x0 (= fail)
l0:
addiu $1, $0, 1
nop
nop
nop
nop
jal l1
nop
beq $1, $0, l2
nop
nop
addiu $29, $29, 0x1 # $29 != 0x0 (= fail)
l1:
or $1, $0, $0
nop
nop
nop
nop
jr $ra
nop
nop
addiu $28, $28, 0x1 # $28 != 0x0 (= fail)
l2:
#####
# test forwarding
addiu $1, $0, 0x1 # $1 = 0x1
addiu $2, $0, 0x2 # $2 = 0x2
addu $3, $1, $2 # $3 = 0x3
subu $4, $3, $2 # $4 = 0x1
sw $1, 0($0)
lw $5, 0($0)
nop # nop to avoid stalling - we only want forwarding
addu $5, $5, $5 # $5 = 0x2
#####
# test stalling from lw data hazards
lw $6, 0($0)
addu $6, $6, $6 # $6 = 0x2
#####
# test flushing from mispredicted beq control hazards
beq $0, $0, l3
nop
nop
addiu $27, $27, 0x1 # $27 != 0x0 (= fail)
l3:
beq $0, $0, l4
nop
addiu $27, $27, 0x1 # $27 != 0x0 (= fail)
l4:
beq $0, $0, l5
addiu $27, $27, 0x1 # $27 != 0x0 (= fail)
l5:
#####
# test flushing from j control hazards
j l6
nop
addiu $26, $26, 0x1 # $26 != 0x0 (= fail)
l6:
j l7
addiu $26, $26, 0x1 # $26 != 0x0 (= fail)
l7:
#####
# test flushing from jal control hazards
jal l8
nop
addiu $25, $25, 0x1 # $25 != 0x0 (= fail)
l8:
jal l9
addiu $25, $25, 0x1 # $25 != 0x0 (= fail)
l9:
#####
# test flushing from jr control hazards
jal l10
j l11
l10:
jr $ra
addiu $24, $24, 0x1 # $24 != 0x0 (= fail)
l11:
####
# test no forwarding of $0
addu $0, $1, $1
addu $7, $0, $0 # $7 = 0x0 (shouldn't be 0x4)