Add a 'kill' pseudoinstruction to the 8080 assembler, which marks when the code
generator is finished with a register; use this to create some more effective peephole optimiser rules.
This commit is contained in:
parent
e2625813c9
commit
88fd7b3cdc
|
@ -21,3 +21,5 @@
|
||||||
%token <y_word> STLDAX
|
%token <y_word> STLDAX
|
||||||
|
|
||||||
%type <y_word> r16 r8
|
%type <y_word> r16 r8
|
||||||
|
|
||||||
|
%token <y_word> KILL
|
||||||
|
|
|
@ -4,6 +4,12 @@
|
||||||
*/
|
*/
|
||||||
#define RCSID3 "$Id$"
|
#define RCSID3 "$Id$"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Specials
|
||||||
|
*/
|
||||||
|
|
||||||
|
0, KILL, 0, "kill",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Intel 8080 keywords
|
* Intel 8080 keywords
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
* Intel 8080 parsing rules
|
* Intel 8080 parsing rules
|
||||||
*/
|
*/
|
||||||
operation
|
operation
|
||||||
: NOOPOP
|
: KILL REG {}
|
||||||
|
| NOOPOP
|
||||||
{ emit1($1);}
|
{ emit1($1);}
|
||||||
|
|
|
|
||||||
D8OP expr
|
D8OP expr
|
||||||
|
|
|
@ -48,6 +48,7 @@ TOKENS
|
||||||
|
|
||||||
const1 = { INT num; } 1 num.
|
const1 = { INT num; } 1 num.
|
||||||
const2 = { INT num; } 2 num.
|
const2 = { INT num; } 2 num.
|
||||||
|
largeconst2 = { INT num; } 2 num. /* Word-sized constant with low byte zero */
|
||||||
smallpconst2 = { INT num; } 2 num. /* Byte-sized positive constant */
|
smallpconst2 = { INT num; } 2 num. /* Byte-sized positive constant */
|
||||||
smallnconst2 = { INT num; } 2 num. /* Byte-sized negative constant */
|
smallnconst2 = { INT num; } 2 num. /* Byte-sized negative constant */
|
||||||
label = { ADDR off; } 2 off.
|
label = { ADDR off; } 2 off.
|
||||||
|
@ -60,17 +61,18 @@ SETS
|
||||||
reg1 = reg + lbreg + m.
|
reg1 = reg + lbreg + m.
|
||||||
b_d_h_sp = regpair + stackpointer.
|
b_d_h_sp = regpair + stackpointer.
|
||||||
b_d_h_psw = regpair + psword.
|
b_d_h_psw = regpair + psword.
|
||||||
immediate = smallpconst2 + smallnconst2 + const2 + label.
|
immediate = largeconst2 + smallpconst2 + smallnconst2 + const2 + label.
|
||||||
src1 = reg.
|
src1 = reg.
|
||||||
src2 = hl_or_de + const2 + label.
|
src2 = hl_or_de + const2 + label.
|
||||||
src1or2 = src1 + src2.
|
src1or2 = src1 + src2.
|
||||||
|
anyreg = reg + regpair.
|
||||||
|
|
||||||
INSTRUCTIONS
|
INSTRUCTIONS
|
||||||
|
|
||||||
/* aci const1:ro kills a:cc cost(2, 7). */
|
/* aci const1:ro kills a:cc cost(2, 7). */
|
||||||
adc reg1:ro kills a:cc cost(1, 4).
|
adc reg1:ro kills a:cc cost(1, 4).
|
||||||
add reg1:ro kills a:cc cost(1, 4).
|
add reg1:ro kills a:cc cost(1, 4).
|
||||||
/* adi const1:ro kills a:cc cost(2, 7). */
|
adi const1:ro kills a:cc cost(2, 7).
|
||||||
ana reg1:ro kills a:cc cost(1, 4).
|
ana reg1:ro kills a:cc cost(1, 4).
|
||||||
ani const1:ro kills a:cc cost(2, 7).
|
ani const1:ro kills a:cc cost(2, 7).
|
||||||
Call "call" label:ro cost(3,17).
|
Call "call" label:ro cost(3,17).
|
||||||
|
@ -154,6 +156,7 @@ INSTRUCTIONS
|
||||||
xri const1:ro kills a:cc cost(2, 7).
|
xri const1:ro kills a:cc cost(2, 7).
|
||||||
xthl kills hl cost(1,18).
|
xthl kills hl cost(1,18).
|
||||||
|
|
||||||
|
kill anyreg:rw kills :cc cost(0, 0).
|
||||||
|
|
||||||
MOVES
|
MOVES
|
||||||
|
|
||||||
|
@ -261,6 +264,9 @@ COERCIONS
|
||||||
|
|
||||||
from hl_or_de yields %1.2
|
from hl_or_de yields %1.2
|
||||||
|
|
||||||
|
from largeconst2
|
||||||
|
yields {const2, %1.num}
|
||||||
|
|
||||||
from smallpconst2
|
from smallpconst2
|
||||||
yields {const2, %1.num}
|
yields {const2, %1.num}
|
||||||
|
|
||||||
|
@ -271,6 +277,10 @@ COERCIONS
|
||||||
uses hl_or_de=%1
|
uses hl_or_de=%1
|
||||||
yields %a
|
yields %a
|
||||||
|
|
||||||
|
from largeconst2
|
||||||
|
uses hl_or_de=%1
|
||||||
|
yields %a
|
||||||
|
|
||||||
from smallpconst2
|
from smallpconst2
|
||||||
uses reg={const1, %1.num & 0xff}
|
uses reg={const1, %1.num & 0xff}
|
||||||
yields %a
|
yields %a
|
||||||
|
@ -305,6 +315,9 @@ PATTERNS
|
||||||
/* Group 1: Load instructions */
|
/* Group 1: Load instructions */
|
||||||
/*********************************************/
|
/*********************************************/
|
||||||
|
|
||||||
|
pat loc ($1 != 0) && (($1 & 0xff) == 0)
|
||||||
|
yields {largeconst2, $1}
|
||||||
|
|
||||||
pat loc ufit($1, 8)
|
pat loc ufit($1, 8)
|
||||||
yields {smallpconst2, $1}
|
yields {smallpconst2, $1}
|
||||||
|
|
||||||
|
@ -727,6 +740,18 @@ pat sde
|
||||||
/****************************************/
|
/****************************************/
|
||||||
|
|
||||||
pat adi $1==2
|
pat adi $1==2
|
||||||
|
with hl_or_de largeconst2
|
||||||
|
uses areg
|
||||||
|
gen
|
||||||
|
mov a, %1.1
|
||||||
|
adi {const1, %2.num >> 8}
|
||||||
|
mov %1.1, a
|
||||||
|
kill a
|
||||||
|
yields %1
|
||||||
|
with largeconst2 hl_or_de
|
||||||
|
yields %1 %2
|
||||||
|
leaving
|
||||||
|
adi 2
|
||||||
with hlreg dereg
|
with hlreg dereg
|
||||||
gen
|
gen
|
||||||
dad de
|
dad de
|
||||||
|
@ -755,6 +780,14 @@ pat sbi $1==2
|
||||||
yields %2 {const2, 0-%1.num}
|
yields %2 {const2, 0-%1.num}
|
||||||
leaving
|
leaving
|
||||||
adi 2
|
adi 2
|
||||||
|
with largeconst2 hl_or_de
|
||||||
|
yields %2 {largeconst2, 0-%1.num}
|
||||||
|
leaving
|
||||||
|
adi 2
|
||||||
|
with smallpconst2 hl_or_de
|
||||||
|
yields %2 {smallnconst2, 0-%1.num}
|
||||||
|
leaving
|
||||||
|
adi 2
|
||||||
with smallnconst2 hl_or_de
|
with smallnconst2 hl_or_de
|
||||||
yields %2 {smallpconst2, 0-%1.num}
|
yields %2 {smallpconst2, 0-%1.num}
|
||||||
leaving
|
leaving
|
||||||
|
@ -768,6 +801,7 @@ pat sbi $1==2
|
||||||
mvi a, {const1, %2.num >> 8}
|
mvi a, {const1, %2.num >> 8}
|
||||||
sbb %1.1
|
sbb %1.1
|
||||||
mov %1.1, a
|
mov %1.1, a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with hl_or_de hl_or_de
|
with hl_or_de hl_or_de
|
||||||
uses areg
|
uses areg
|
||||||
|
@ -778,6 +812,7 @@ pat sbi $1==2
|
||||||
mov a,%2.1
|
mov a,%2.1
|
||||||
sbb %1.1
|
sbb %1.1
|
||||||
mov %1.1,a
|
mov %1.1,a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with hl_or_de hl_or_de
|
with hl_or_de hl_or_de
|
||||||
uses areg
|
uses areg
|
||||||
|
@ -788,6 +823,7 @@ pat sbi $1==2
|
||||||
mov a,%2.1
|
mov a,%2.1
|
||||||
sbb %1.1
|
sbb %1.1
|
||||||
mov %2.1,a
|
mov %2.1,a
|
||||||
|
kill a
|
||||||
yields %2
|
yields %2
|
||||||
|
|
||||||
pat sbi $1==4
|
pat sbi $1==4
|
||||||
|
@ -1282,6 +1318,7 @@ pat and $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
ani {const1, %2.num & 0xff}
|
ani {const1, %2.num & 0xff}
|
||||||
mov %1.2, a
|
mov %1.2, a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with smallnconst2 hl_or_de
|
with smallnconst2 hl_or_de
|
||||||
yields %1 %2
|
yields %1 %2
|
||||||
|
@ -1293,9 +1330,11 @@ pat and $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
ani {const1, %2.num & 0xff}
|
ani {const1, %2.num & 0xff}
|
||||||
mov %1.2, a
|
mov %1.2, a
|
||||||
|
kill a
|
||||||
mov a, %1.1
|
mov a, %1.1
|
||||||
ani {const1, %2.num >> 8}
|
ani {const1, %2.num >> 8}
|
||||||
mov %1.1, a
|
mov %1.1, a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with const2 hl_or_de
|
with const2 hl_or_de
|
||||||
yields %1 %2
|
yields %1 %2
|
||||||
|
@ -1307,9 +1346,11 @@ pat and $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
ana %2.2
|
ana %2.2
|
||||||
mov %2.2, a
|
mov %2.2, a
|
||||||
|
kill a
|
||||||
mov a, %1.1
|
mov a, %1.1
|
||||||
ana %2.1
|
ana %2.1
|
||||||
mov %2.1, a
|
mov %2.1, a
|
||||||
|
kill a
|
||||||
yields %2
|
yields %2
|
||||||
with hl_or_de hl_or_de
|
with hl_or_de hl_or_de
|
||||||
uses areg
|
uses areg
|
||||||
|
@ -1317,9 +1358,11 @@ pat and $1==2
|
||||||
mov a,%1.2
|
mov a,%1.2
|
||||||
ana %2.2
|
ana %2.2
|
||||||
mov %1.2,a
|
mov %1.2,a
|
||||||
|
kill a
|
||||||
mov a,%1.1
|
mov a,%1.1
|
||||||
ana %2.1
|
ana %2.1
|
||||||
mov %1.1,a
|
mov %1.1,a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
|
|
||||||
pat and defined($1)
|
pat and defined($1)
|
||||||
|
@ -1343,6 +1386,7 @@ pat ior $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
ori {const1, %2.num & 0xff}
|
ori {const1, %2.num & 0xff}
|
||||||
mov %1.2, a
|
mov %1.2, a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with smallpconst2 hl_or_de
|
with smallpconst2 hl_or_de
|
||||||
yields %1 %2
|
yields %1 %2
|
||||||
|
@ -1354,6 +1398,7 @@ pat ior $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
ori {const1, %2.num & 0xff}
|
ori {const1, %2.num & 0xff}
|
||||||
mov %1.2, a
|
mov %1.2, a
|
||||||
|
kill a
|
||||||
move {const1, 0xff}, %1.1
|
move {const1, 0xff}, %1.1
|
||||||
yields %1
|
yields %1
|
||||||
with smallnconst2 hl_or_de
|
with smallnconst2 hl_or_de
|
||||||
|
@ -1366,9 +1411,11 @@ pat ior $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
ori {const1, %2.num & 0xff}
|
ori {const1, %2.num & 0xff}
|
||||||
mov %1.2, a
|
mov %1.2, a
|
||||||
|
kill a
|
||||||
mov a, %1.1
|
mov a, %1.1
|
||||||
ori {const1, %2.num >> 8}
|
ori {const1, %2.num >> 8}
|
||||||
mov %1.1, a
|
mov %1.1, a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with const2 hl_or_de
|
with const2 hl_or_de
|
||||||
yields %1 %2
|
yields %1 %2
|
||||||
|
@ -1380,9 +1427,11 @@ pat ior $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
ora %2.2
|
ora %2.2
|
||||||
mov %2.2, a
|
mov %2.2, a
|
||||||
|
kill a
|
||||||
mov a, %1.1
|
mov a, %1.1
|
||||||
ora %2.1
|
ora %2.1
|
||||||
mov %2.1, a
|
mov %2.1, a
|
||||||
|
kill a
|
||||||
yields %2
|
yields %2
|
||||||
with hl_or_de hl_or_de
|
with hl_or_de hl_or_de
|
||||||
uses areg
|
uses areg
|
||||||
|
@ -1390,9 +1439,11 @@ pat ior $1==2
|
||||||
mov a,%1.2
|
mov a,%1.2
|
||||||
ora %2.2
|
ora %2.2
|
||||||
mov %1.2,a
|
mov %1.2,a
|
||||||
|
kill a
|
||||||
mov a,%1.1
|
mov a,%1.1
|
||||||
ora %2.1
|
ora %2.1
|
||||||
mov %1.1,a
|
mov %1.1,a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
|
|
||||||
pat ior defined($1)
|
pat ior defined($1)
|
||||||
|
@ -1414,6 +1465,7 @@ pat xor $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
xri {const1, %2.num & 0xff}
|
xri {const1, %2.num & 0xff}
|
||||||
mov %1.2, a
|
mov %1.2, a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with smallpconst2 hl_or_de
|
with smallpconst2 hl_or_de
|
||||||
yields %1 %2
|
yields %1 %2
|
||||||
|
@ -1425,9 +1477,11 @@ pat xor $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
xri {const1, %2.num & 0xff}
|
xri {const1, %2.num & 0xff}
|
||||||
mov %1.2, a
|
mov %1.2, a
|
||||||
|
kill a
|
||||||
mov a, %1.1
|
mov a, %1.1
|
||||||
xri {const1, %2.num >> 8}
|
xri {const1, %2.num >> 8}
|
||||||
mov %1.1, a
|
mov %1.1, a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
with const2 hl_or_de
|
with const2 hl_or_de
|
||||||
yields %1 %2
|
yields %1 %2
|
||||||
|
@ -1439,9 +1493,11 @@ pat xor $1==2
|
||||||
mov a, %1.2
|
mov a, %1.2
|
||||||
xra %2.2
|
xra %2.2
|
||||||
mov %2.2, a
|
mov %2.2, a
|
||||||
|
kill a
|
||||||
mov a, %1.1
|
mov a, %1.1
|
||||||
xra %2.1
|
xra %2.1
|
||||||
mov %2.1, a
|
mov %2.1, a
|
||||||
|
kill a
|
||||||
yields %2
|
yields %2
|
||||||
with hl_or_de hl_or_de
|
with hl_or_de hl_or_de
|
||||||
uses areg
|
uses areg
|
||||||
|
@ -1449,9 +1505,11 @@ pat xor $1==2
|
||||||
mov a,%1.2
|
mov a,%1.2
|
||||||
xra %2.2
|
xra %2.2
|
||||||
mov %1.2,a
|
mov %1.2,a
|
||||||
|
kill a
|
||||||
mov a,%1.1
|
mov a,%1.1
|
||||||
xra %2.1
|
xra %2.1
|
||||||
mov %1.1,a
|
mov %1.1,a
|
||||||
|
kill a
|
||||||
yields %1
|
yields %1
|
||||||
|
|
||||||
pat xor defined($1)
|
pat xor defined($1)
|
||||||
|
@ -1470,6 +1528,7 @@ uses areg
|
||||||
gen mov a,%1.2
|
gen mov a,%1.2
|
||||||
cma.
|
cma.
|
||||||
mov %1.2,a
|
mov %1.2,a
|
||||||
|
kill a
|
||||||
mov a,%1.1
|
mov a,%1.1
|
||||||
cma.
|
cma.
|
||||||
mov %1.1,a yields %1
|
mov %1.1,a yields %1
|
||||||
|
|
|
@ -26,4 +26,37 @@ push d : lxi d, X : pop h -> lxi h, X : xchg ;
|
||||||
|
|
||||||
push h : lhld X : pop d -> xchg : lhld X ;
|
push h : lhld X : pop d -> xchg : lhld X ;
|
||||||
|
|
||||||
|
X -1 -> X 255 ;
|
||||||
|
X -2 -> X 254 ;
|
||||||
|
X -3 -> X 253 ;
|
||||||
|
X -4 -> X 252 ;
|
||||||
|
|
||||||
|
mov a, X : adi -4 : mov X, a : kill a -> dcr X : dcr X : dcr X : dcr X;
|
||||||
|
mov a, X : adi -3 : mov X, a : kill a -> dcr X : dcr X : dcr X ;
|
||||||
|
mov a, X : adi -2 : mov X, a : kill a -> dcr X : dcr X ;
|
||||||
|
mov a, X : adi -1 : mov X, a : kill a -> dcr X ;
|
||||||
|
mov a, X : adi 0 : mov X, a : kill a -> ;
|
||||||
|
mov a, X : adi 1 : mov X, a : kill a -> inr X ;
|
||||||
|
mov a, X : adi 2 : mov X, a : kill a -> inr X : inr X ;
|
||||||
|
mov a, X : adi 3 : mov X, a : kill a -> inr X : inr X : inr X ;
|
||||||
|
mov a, X : adi 4 : mov X, a : kill a -> inr X : inr X : inr X : inr X;
|
||||||
|
|
||||||
|
mov a, X : sbi -4 : mov X, a : kill a -> inr X : inr X : inr X : inr X;
|
||||||
|
mov a, X : sbi -3 : mov X, a : kill a -> inr X : inr X : inr X ;
|
||||||
|
mov a, X : sbi -2 : mov X, a : kill a -> inr X : inr X ;
|
||||||
|
mov a, X : sbi -1 : mov X, a : kill a -> inr X ;
|
||||||
|
mov a, X : sbi 0 : mov X, a : kill a -> ;
|
||||||
|
mov a, X : sbi 1 : mov X, a : kill a -> dcr X ;
|
||||||
|
mov a, X : sbi 2 : mov X, a : kill a -> dcr X : dcr X ;
|
||||||
|
mov a, X : sbi 3 : mov X, a : kill a -> dcr X : dcr X : dcr X ;
|
||||||
|
mov a, X : sbi 4 : mov X, a : kill a -> dcr X : dcr X : dcr X : dcr X ;
|
||||||
|
|
||||||
|
mov a, X : ani 0 : mov X, a : kill a -> mvi X, 0 ;
|
||||||
|
mov a, X : ani 255 : mov X, a : kill a -> ;
|
||||||
|
|
||||||
|
mov a, X : ori 0 : mov X, a : kill a -> ;
|
||||||
|
mov a, X : ori 255 : mov X, a : kill a -> mvi X, 255 ;
|
||||||
|
|
||||||
|
mov a, X : xri 0 : mov X, a : kill a -> ;
|
||||||
|
|
||||||
%%;
|
%%;
|
||||||
|
|
|
@ -111,5 +111,19 @@ big
|
||||||
asp 4
|
asp 4
|
||||||
7
|
7
|
||||||
|
|
||||||
|
/* And var with big low-byte-zero const */
|
||||||
|
|
||||||
|
loe big
|
||||||
|
loc 256
|
||||||
|
and EM_WSIZE
|
||||||
|
loc 256
|
||||||
|
cmu EM_WSIZE
|
||||||
|
zeq *8
|
||||||
|
|
||||||
|
loc __LINE__
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
8
|
||||||
|
|
||||||
cal $finished
|
cal $finished
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,5 +27,7 @@ void _m_a_i_n(void)
|
||||||
ASSERT(((unsigned int)1 + (unsigned int)two) == 3);
|
ASSERT(((unsigned int)1 + (unsigned int)two) == 3);
|
||||||
ASSERT(((unsigned int)-1 + (unsigned int)two) == 1);
|
ASSERT(((unsigned int)-1 + (unsigned int)two) == 1);
|
||||||
|
|
||||||
|
ASSERT(((unsigned int)two + (unsigned int)256) == 258);
|
||||||
|
|
||||||
finished();
|
finished();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ int two = 2;
|
||||||
int one = 1;
|
int one = 1;
|
||||||
int zero = 0;
|
int zero = 0;
|
||||||
int minusone = -1;
|
int minusone = -1;
|
||||||
|
int biggish = 258;
|
||||||
|
|
||||||
/* Bypasses the CRT, so there's no stdio. */
|
/* Bypasses the CRT, so there's no stdio. */
|
||||||
void _m_a_i_n(void)
|
void _m_a_i_n(void)
|
||||||
|
@ -28,5 +29,7 @@ void _m_a_i_n(void)
|
||||||
ASSERT(((unsigned int)2 - (unsigned int)one) == 1);
|
ASSERT(((unsigned int)2 - (unsigned int)one) == 1);
|
||||||
ASSERT(((unsigned int)1 - (unsigned int)two) == UINT_MAX);
|
ASSERT(((unsigned int)1 - (unsigned int)two) == UINT_MAX);
|
||||||
|
|
||||||
|
ASSERT(((unsigned int)biggish - (unsigned int)256) == 2);
|
||||||
|
|
||||||
finished();
|
finished();
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,5 +111,19 @@ big
|
||||||
asp 4
|
asp 4
|
||||||
7
|
7
|
||||||
|
|
||||||
|
/* Or var with big low-byte-zero const */
|
||||||
|
|
||||||
|
loe big
|
||||||
|
loc 256
|
||||||
|
ior EM_WSIZE
|
||||||
|
loc 258
|
||||||
|
cmu EM_WSIZE
|
||||||
|
zeq *8
|
||||||
|
|
||||||
|
loc __LINE__
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
8
|
||||||
|
|
||||||
cal $finished
|
cal $finished
|
||||||
end
|
end
|
||||||
|
|
|
@ -111,6 +111,20 @@ big
|
||||||
asp 4
|
asp 4
|
||||||
7
|
7
|
||||||
|
|
||||||
|
/* Xor var with big low-byte-zero const */
|
||||||
|
|
||||||
|
loe big
|
||||||
|
loc 256
|
||||||
|
xor EM_WSIZE
|
||||||
|
loc 745
|
||||||
|
cmu EM_WSIZE
|
||||||
|
zeq *8
|
||||||
|
|
||||||
|
loc __LINE__
|
||||||
|
cal $fail
|
||||||
|
asp 4
|
||||||
|
8
|
||||||
|
|
||||||
|
|
||||||
cal $finished
|
cal $finished
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue