mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
PS1 updates from Jens
This commit is contained in:
parent
56a35649fe
commit
80c20a90ea
|
@ -684,6 +684,9 @@ Notes:
|
||||||
- UPX creates as default a suitable executable for CD-Mastering
|
- UPX creates as default a suitable executable for CD-Mastering
|
||||||
and console transfer. For a CD-Master main executable you could also try
|
and console transfer. For a CD-Master main executable you could also try
|
||||||
the special option "--boot-only" as described below.
|
the special option "--boot-only" as described below.
|
||||||
|
It has been reported that upx packed executables are fully compatible with
|
||||||
|
the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in
|
||||||
|
Sony PlayStation (PSone) emulation mode.
|
||||||
|
|
||||||
- Normally the packed files use the same memory areas like the uncompressed
|
- Normally the packed files use the same memory areas like the uncompressed
|
||||||
versions, so they will not override other memory areas while unpacking.
|
versions, so they will not override other memory areas while unpacking.
|
||||||
|
|
|
@ -318,7 +318,8 @@ void PackPs1::buildLoader(const Filter *)
|
||||||
sa_tmp += overlap = ALIGN_UP((ph.overlap_overhead - sa_tmp), 4u);
|
sa_tmp += overlap = ALIGN_UP((ph.overlap_overhead - sa_tmp), 4u);
|
||||||
}
|
}
|
||||||
|
|
||||||
foundBss = findBssSection();
|
if (isCon || !isCon && M_IS_LZMA(ph.method))
|
||||||
|
foundBss = findBssSection();
|
||||||
|
|
||||||
if (M_IS_LZMA(ph.method) && !buildPart2)
|
if (M_IS_LZMA(ph.method) && !buildPart2)
|
||||||
{
|
{
|
||||||
|
@ -370,16 +371,20 @@ void PackPs1::buildLoader(const Filter *)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (M_IS_LZMA(ph.method))
|
if (M_IS_LZMA(ph.method))
|
||||||
addLoader("cdb.start.lzma", "pad.code", "cdb.entry.lzma", method, "cdb.lzma.cpr",
|
addLoader(!foundBss ? "cdb.start.lzma" : "bss.cdb.start.lzma", "pad.code",
|
||||||
|
!foundBss ? "cdb.entry.lzma" : "bss.cdb.entry.lzma",
|
||||||
|
method, "cdb.lzma.cpr",
|
||||||
ih.tx_ptr & 0xffff ? "dec.ptr" : "dec.ptr.hi",
|
ih.tx_ptr & 0xffff ? "dec.ptr" : "dec.ptr.hi",
|
||||||
"lzma.exec", NULL);
|
"lzma.exec", NULL);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
assert(foundBss != true);
|
||||||
addLoader("cdb.start", "pad.code", "cdb.entry",
|
addLoader("cdb.start", "pad.code", "cdb.entry",
|
||||||
ih.tx_ptr & 0xffff ? "cdb.dec.ptr" : "cdb.dec.ptr.hi",
|
ih.tx_ptr & 0xffff ? "cdb.dec.ptr" : "cdb.dec.ptr.hi",
|
||||||
method,
|
method,
|
||||||
sa_cnt ? sa_cnt > (0x10000 << 2) ? "memset.long" : "memset.short" : "",
|
sa_cnt ? sa_cnt > (0x10000 << 2) ? "memset.long" : "memset.short" : "",
|
||||||
!foundBss ? "cdb.exit" : "bss.exit",
|
"cdb.exit", NULL);
|
||||||
"pad.code", NULL);
|
}
|
||||||
}
|
}
|
||||||
addLoader("UPX1HEAD", "IDENTSTR", NULL);
|
addLoader("UPX1HEAD", "IDENTSTR", NULL);
|
||||||
}
|
}
|
||||||
|
@ -554,7 +559,9 @@ void PackPs1::pack(OutputFile *fo)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
d_len = (lsize - h_len) - getLoaderSectionStart(M_IS_LZMA(ph.method) ? "cdb.entry.lzma" : "cdb.entry");
|
const char* entry_lzma = !foundBss ? "cdb.entry.lzma" : "bss.cdb.entry.lzma";
|
||||||
|
|
||||||
|
d_len = (lsize - h_len) - getLoaderSectionStart(M_IS_LZMA(ph.method) ? entry_lzma : "cdb.entry");
|
||||||
e_len = (lsize - d_len) - h_len;
|
e_len = (lsize - d_len) - h_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -611,8 +618,12 @@ void PackPs1::pack(OutputFile *fo)
|
||||||
linker->defineSymbol("PSVR", FIX_PSVR);
|
linker->defineSymbol("PSVR", FIX_PSVR);
|
||||||
linker->defineSymbol("CPDO", comp_data_start);
|
linker->defineSymbol("CPDO", comp_data_start);
|
||||||
if (M_IS_LZMA(ph.method))
|
if (M_IS_LZMA(ph.method))
|
||||||
linker->defineSymbol("lzma_cpr", getLoaderSectionStart("lzma.exec")
|
{
|
||||||
- getLoaderSectionStart("cdb.entry.lzma"));
|
unsigned entry_lzma = getLoaderSectionStart( !foundBss ? "cdb.entry.lzma" :
|
||||||
|
"bss.cdb.entry.lzma");
|
||||||
|
|
||||||
|
linker->defineSymbol("lzma_cpr", getLoaderSectionStart("lzma.exec") - entry_lzma);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
relocateLoader();
|
relocateLoader();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -34,11 +34,15 @@
|
||||||
#ifndef _MR3K_STD_CONF_
|
#ifndef _MR3K_STD_CONF_
|
||||||
#define _MR3K_STD_CONF_
|
#define _MR3K_STD_CONF_
|
||||||
|
|
||||||
|
#define JOHN 1
|
||||||
|
#define ALT_SMALL 1
|
||||||
|
|
||||||
|
|
||||||
;//////////////////////////////////////
|
;//////////////////////////////////////
|
||||||
;// register defines
|
;// register defines
|
||||||
;//////////////////////////////////////
|
;//////////////////////////////////////
|
||||||
|
|
||||||
|
#if 1
|
||||||
#define tmp at
|
#define tmp at
|
||||||
|
|
||||||
#define dst t0
|
#define dst t0
|
||||||
|
@ -58,6 +62,31 @@
|
||||||
#define m_off t7
|
#define m_off t7
|
||||||
#define m_pos t7
|
#define m_pos t7
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
.print "\nwarning redefined src / dst\n"
|
||||||
|
|
||||||
|
#define tmp v1
|
||||||
|
|
||||||
|
#define src a0
|
||||||
|
#define dst a1
|
||||||
|
|
||||||
|
#define pc v0
|
||||||
|
#define cnt a2
|
||||||
|
|
||||||
|
#define src_ilen src
|
||||||
|
#define bb t1
|
||||||
|
#define ilen t2
|
||||||
|
#define last_m_off t3
|
||||||
|
#define m_len t4
|
||||||
|
#define bc t5
|
||||||
|
|
||||||
|
#define var t6
|
||||||
|
#define m_off t7
|
||||||
|
#define m_pos t7
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
;//////////////////////////////////////
|
;//////////////////////////////////////
|
||||||
;// init bitaccess
|
;// init bitaccess
|
||||||
|
@ -89,12 +118,32 @@
|
||||||
|
|
||||||
.macro init
|
.macro init
|
||||||
|
|
||||||
|
init_sz = .
|
||||||
|
|
||||||
|
.if (JOHN == 0)
|
||||||
move bc,zero
|
move bc,zero
|
||||||
|
|
||||||
|
.else // John's method
|
||||||
|
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
.if (ALT_SMALL == 1)
|
||||||
|
lui bc,1 << (31 - 16)
|
||||||
|
move bb,bc
|
||||||
|
.else
|
||||||
|
move bc,zero
|
||||||
|
.endif
|
||||||
|
.else
|
||||||
|
lui bc,1 << (31 - 16)
|
||||||
|
move bb,bc
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
li last_m_off,1
|
li last_m_off,1
|
||||||
.if (src != src_ilen)
|
.if (src != src_ilen)
|
||||||
move src_ilen,src
|
move src_ilen,src
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
init_sz = . - init_sz
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,6 +153,7 @@
|
||||||
|
|
||||||
.macro ADDBITS
|
.macro ADDBITS
|
||||||
|
|
||||||
|
.if (JOHN == 0)
|
||||||
.if (UCL_SMALL == 1)
|
.if (UCL_SMALL == 1)
|
||||||
addiu bc, -1
|
addiu bc, -1
|
||||||
bltz bc, 2b
|
bltz bc, 2b
|
||||||
|
@ -112,32 +162,92 @@
|
||||||
addiu bc, -1
|
addiu bc, -1
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
.else // John's method
|
||||||
|
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
.if (ALT_SMALL == 1)
|
||||||
|
beq bc,bb,2b # detect flag bit [empty]
|
||||||
|
.else
|
||||||
|
addiu bc,-1
|
||||||
|
bltz bc,2b
|
||||||
|
.endif
|
||||||
|
.else
|
||||||
|
srl var,bb,31 # var= most significant bit of bb
|
||||||
|
bne bc,bb,2f # detect flag bit [empty]
|
||||||
|
sll bb,1
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro ADDBITS_DONE
|
.macro ADDBITS_DONE
|
||||||
|
|
||||||
|
.if (JOHN == 0)
|
||||||
srlv var,bb,bc
|
srlv var,bb,bc
|
||||||
.if (UCL_SMALL == 1)
|
.if (UCL_SMALL == 1)
|
||||||
jr ra
|
jr ra
|
||||||
.endif
|
.endif
|
||||||
andi var,0x0001
|
andi var,0x0001
|
||||||
|
|
||||||
|
.else // John's method
|
||||||
|
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
.if (ALT_SMALL == 1)
|
||||||
|
srl var,bb,31 # var= most significant bit of bb
|
||||||
|
jr ra
|
||||||
|
sll bb,1
|
||||||
|
.else
|
||||||
|
srlv var,bb,bc
|
||||||
|
jr ra
|
||||||
|
andi var,0x0001
|
||||||
|
.endif
|
||||||
|
.else
|
||||||
|
.if (UCL_NRV_BB == 8)
|
||||||
|
sll bb,1
|
||||||
|
addiu bb,1 # the flag bit
|
||||||
|
srl var,bb,8 # var= most significant bit of bb
|
||||||
|
sll bb,24 # left-justify in register
|
||||||
|
.else
|
||||||
|
srl var,bb,31 # var= most significant bit of bb
|
||||||
|
sll bb,1
|
||||||
|
addiu bb,1
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.endif
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro FILLBYTES_8
|
.macro FILLBYTES_8
|
||||||
|
|
||||||
.if (UCL_SMALL == 1)
|
.if (JOHN == 0)
|
||||||
li bc,8
|
|
||||||
.else
|
|
||||||
li bc,7
|
li bc,7
|
||||||
.endif
|
|
||||||
lbu bb,0(src_ilen)
|
lbu bb,0(src_ilen)
|
||||||
addiu src_ilen,1
|
addiu src_ilen,1
|
||||||
|
|
||||||
|
.else // John's method
|
||||||
|
|
||||||
|
.if (ALT_SMALL == 0)
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
li bc,8
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
lbu bb,0(src_ilen)
|
||||||
|
addiu src_ilen,1
|
||||||
|
.if ((ALT_SMALL == 1) && (UCL_SMALL == 1))
|
||||||
|
sll bb,1
|
||||||
|
addiu bb,1 # the flag bit
|
||||||
|
sll bb,24-1 # left-justify in register
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.endif
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
||||||
.macro FILLBYTES_32
|
.macro FILLBYTES_32
|
||||||
|
|
||||||
|
.if (JOHN == 0)
|
||||||
.if (UCL_SMALL == 1)
|
.if (UCL_SMALL == 1)
|
||||||
li bc,32
|
li bc,32
|
||||||
.else
|
.else
|
||||||
|
@ -147,9 +257,27 @@
|
||||||
lwl bb,3(src_ilen)
|
lwl bb,3(src_ilen)
|
||||||
addiu src_ilen,4
|
addiu src_ilen,4
|
||||||
|
|
||||||
|
.else // John's method
|
||||||
|
|
||||||
|
.if (ALT_SMALL == 0)
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
li bc,32
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
lwr bb,0(src_ilen)
|
||||||
|
lwl bb,3(src_ilen)
|
||||||
|
addiu src_ilen,4
|
||||||
|
.if ((ALT_SMALL == 1) && (UCL_SMALL == 1))
|
||||||
|
srl var,bb,31 # var= most significant bit of bb
|
||||||
|
sll bb,1
|
||||||
|
jr ra
|
||||||
|
addiu bb,1
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro FILLBYTES
|
.macro FILLBITS
|
||||||
|
|
||||||
.if (UCL_NRV_BB == 8)
|
.if (UCL_NRV_BB == 8)
|
||||||
FILLBYTES_8
|
FILLBYTES_8
|
||||||
|
@ -159,79 +287,29 @@
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
// This alternate for UCL_SMALL is 1 cycle faster for most getbit
|
|
||||||
// at a cost of 1 cycle (32 bits) or 3 cycles (8 bits) during refill.
|
|
||||||
// [Refill could save 1 cycle if MIPS had "set CarryIn" for ADD or SHIFT.]
|
|
||||||
// Call 'getbit'; it returns the next bit (0 or 1), in register 'var'.
|
|
||||||
// Register 'bb' is the bit buffer; register 'bc' contains the 'empty' value.
|
|
||||||
// The cases for widths 8 and 32 are not as similar as before,
|
|
||||||
// and 64-bit registers would require other code.
|
|
||||||
// But it is 1 cycle faster 31/32 of the time.
|
|
||||||
// [Indentation after control transfer emphasizes delay slot.]
|
|
||||||
//
|
|
||||||
//init:
|
|
||||||
// lui bc,1<<(31 - 16) # 1<<31 the flag bit
|
|
||||||
// lui bb,1<<(31 - 16) # 1<<31 empty
|
|
||||||
//--
|
|
||||||
// .if (8==UCL_NRV_BB)
|
|
||||||
//refill:
|
|
||||||
// lbu bb,0(src_ilen)
|
|
||||||
// addiu src_len,1
|
|
||||||
// sll bb,1
|
|
||||||
// ori bb,1 # the flag bit
|
|
||||||
// sll bb,24-1 # left-justify in register
|
|
||||||
// // falling through the 'beq' below saves 3 words of space
|
|
||||||
// .endif
|
|
||||||
//getbit:
|
|
||||||
// beq bc,bb,refill # detect flag bit [empty]
|
|
||||||
// srl var,bb,31 # var= most significant bit of bb
|
|
||||||
// jr ra
|
|
||||||
// sll bb,1
|
|
||||||
// .if (32==UCL_NRV_BB)
|
|
||||||
//refill:
|
|
||||||
// lwr bb,0(src_ilen)
|
|
||||||
// lwl bb,3(src_ilen)
|
|
||||||
// addiu src_ilen,4
|
|
||||||
// srl var,bb,31 # var= most significant bit of bb
|
|
||||||
// sll bb,1
|
|
||||||
// jr ra
|
|
||||||
// ori bb,1 # the flag bit
|
|
||||||
// .endif
|
|
||||||
|
|
||||||
// 2006-09-06 Faster by 3 cycles for inline expansion:
|
|
||||||
// beq bc,bb,7f # detect flag bit [empty]
|
|
||||||
// srl var,bb,31 # var= most significant bit of bb
|
|
||||||
// sll bb,1
|
|
||||||
//6:
|
|
||||||
// .subsection 1 # somewhere out-of-line
|
|
||||||
//7:
|
|
||||||
// b refill
|
|
||||||
// addi ra,r_bd_base,6b - bd_base # return past the 'sll' above
|
|
||||||
// .subsection 0 # return to main in-line code
|
|
||||||
//
|
|
||||||
// which is 3 cycles usually, +2 cycles for entering refill,
|
|
||||||
// +8 bytes (2 instructions) per getbit [7 in nrv2b, 9 in nrv2e]
|
|
||||||
// and requires another register r_bd_base which holds a handy
|
|
||||||
// address within +/- 32KB of the returns from refill.
|
|
||||||
//
|
|
||||||
|
|
||||||
.macro GBIT
|
.macro GBIT
|
||||||
|
|
||||||
.if (UCL_SMALL == 1)
|
.if (UCL_SMALL == 1)
|
||||||
2:
|
2:
|
||||||
FILLBYTES
|
FILLBITS
|
||||||
1:
|
1:
|
||||||
ADDBITS
|
ADDBITS
|
||||||
ADDBITS_DONE
|
ADDBITS_DONE
|
||||||
.else
|
.else
|
||||||
ADDBITS
|
ADDBITS
|
||||||
FILLBYTES
|
FILLBITS
|
||||||
|
.if (JOHN == 1)
|
||||||
|
ADDBITS_DONE
|
||||||
|
2:
|
||||||
|
.else
|
||||||
2:
|
2:
|
||||||
ADDBITS_DONE
|
ADDBITS_DONE
|
||||||
|
.endif
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
||||||
;//////////////////////////////////////
|
;//////////////////////////////////////
|
||||||
;// getbit call macro for SMALL version
|
;// getbit call macro for SMALL version
|
||||||
;//////////////////////////////////////
|
;//////////////////////////////////////
|
||||||
|
@ -247,8 +325,23 @@
|
||||||
.ifb p1
|
.ifb p1
|
||||||
bal t // gb_sub
|
bal t // gb_sub
|
||||||
.else
|
.else
|
||||||
|
|
||||||
|
.if (JOHN == 0)
|
||||||
bal t+4 // gb_sub+4
|
bal t+4 // gb_sub+4
|
||||||
addiu bc,-1
|
addiu bc,-1
|
||||||
|
|
||||||
|
.else // John's method
|
||||||
|
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
.if (ALT_SMALL == 0)
|
||||||
|
bal t+4 // gb_sub+4
|
||||||
|
addiu bc,-1
|
||||||
|
.else
|
||||||
|
bal t // gb_sub+4
|
||||||
|
nop
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
.endif
|
.endif
|
||||||
.else
|
.else
|
||||||
GBIT
|
GBIT
|
||||||
|
@ -271,20 +364,20 @@
|
||||||
.endif
|
.endif
|
||||||
\type decomp_done
|
\type decomp_done
|
||||||
.if (UCL_SMALL == 1)
|
.if (UCL_SMALL == 1)
|
||||||
WITHOUT_SUB = 0
|
|
||||||
GBIT
|
GBIT
|
||||||
.endif
|
.endif
|
||||||
.else
|
.else
|
||||||
.ifc "\option", "sub_only"
|
.ifc "\option", "sub_only"
|
||||||
|
|
||||||
2:
|
2:
|
||||||
FILLBYTES
|
FILLBITS
|
||||||
.ifnb label
|
.ifnb label
|
||||||
.global \label
|
.global \label
|
||||||
\label:
|
\label:
|
||||||
.endif
|
.endif
|
||||||
ADDBITS
|
ADDBITS
|
||||||
ADDBITS_DONE
|
ADDBITS_DONE
|
||||||
|
|
||||||
.else
|
.else
|
||||||
.ifc "\option", "without_sub"
|
.ifc "\option", "without_sub"
|
||||||
.if (UCL_SMALL == 1)
|
.if (UCL_SMALL == 1)
|
||||||
|
@ -309,12 +402,12 @@
|
||||||
|
|
||||||
.macro uclmcpy ret
|
.macro uclmcpy ret
|
||||||
|
|
||||||
local wordchk, bcpy
|
local wordchk, prepbcpy
|
||||||
local bcpy_chk, skip
|
local bcopy, skip
|
||||||
|
|
||||||
.if (UCL_FAST == 1)
|
.if (UCL_FAST == 1)
|
||||||
slti var,m_off,4
|
slti var,m_off,4
|
||||||
bnez var,bcpy
|
bnez var,prepbcpy
|
||||||
subu m_pos,dst,m_off
|
subu m_pos,dst,m_off
|
||||||
wordchk:
|
wordchk:
|
||||||
slti var,m_len,4
|
slti var,m_len,4
|
||||||
|
@ -327,22 +420,56 @@ wordchk:
|
||||||
addiu m_pos,4
|
addiu m_pos,4
|
||||||
bnez m_len,wordchk
|
bnez m_len,wordchk
|
||||||
addiu dst,4
|
addiu dst,4
|
||||||
|
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
.if (WITHOUT_SUB == 1)
|
||||||
|
t = gb_e
|
||||||
|
.else
|
||||||
|
t = 1f
|
||||||
|
.endif
|
||||||
|
bal t
|
||||||
|
addiu ra, (\ret + 4) - (. + 4)
|
||||||
|
.else
|
||||||
|
.if (JOHN == 0)
|
||||||
b \ret
|
b \ret
|
||||||
nop
|
nop
|
||||||
.else
|
.else
|
||||||
|
b \ret + 4
|
||||||
|
srl var,bb,31 # var= most significant bit of bb
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
prepbcpy:
|
||||||
|
.else
|
||||||
subu m_pos,dst,m_off
|
subu m_pos,dst,m_off
|
||||||
.endif
|
.endif
|
||||||
bcpy_chk:
|
bcopy:
|
||||||
beqz m_len,\ret
|
|
||||||
bcpy:
|
|
||||||
lbu var,0(m_pos)
|
lbu var,0(m_pos)
|
||||||
skip:
|
skip:
|
||||||
addiu m_len,-1
|
addiu m_len,-1
|
||||||
sb var,0(dst)
|
|
||||||
addiu m_pos,1
|
addiu m_pos,1
|
||||||
b bcpy_chk
|
|
||||||
addiu dst,1
|
addiu dst,1
|
||||||
|
bnez m_len,bcopy
|
||||||
|
sb var,-1(dst)
|
||||||
|
|
||||||
|
.if (UCL_SMALL == 1)
|
||||||
|
.if (WITHOUT_SUB == 1)
|
||||||
|
t = gb_e
|
||||||
|
.else
|
||||||
|
t = 1f
|
||||||
|
.endif
|
||||||
|
bal t
|
||||||
|
addiu ra, (\ret + 4) - (. + 4)
|
||||||
|
.else
|
||||||
|
.if (JOHN == 0)
|
||||||
|
b \ret
|
||||||
|
nop
|
||||||
|
.else
|
||||||
|
b \ret + 4
|
||||||
|
srl var,bb,31 # var= most significant bit of bb
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
||||||
#endif //_MR3K_STD_CONF_
|
#endif //_MR3K_STD_CONF_
|
||||||
|
|
Loading…
Reference in New Issue
Block a user