19 lines
700 B
Diff
19 lines
700 B
Diff
|
--- dyngen.c.orig 2005-04-30 11:59:05.000000000 +0100
|
||
|
+++ dyngen.c 2005-04-30 12:00:11.000000000 +0100
|
||
|
@@ -1396,11 +1395,13 @@ void gen_code(const char *name, host_ulo
|
||
|
#elif defined(HOST_PPC)
|
||
|
{
|
||
|
uint8_t *p;
|
||
|
+ uint32_t insn;
|
||
|
p = (void *)(p_end - 4);
|
||
|
if (p == p_start)
|
||
|
error("empty code for %s", name);
|
||
|
- if (get32((uint32_t *)p) != 0x4e800020)
|
||
|
- error("blr expected at the end of %s", name);
|
||
|
+ insn = get32((uint32_t *)p);
|
||
|
+ if (insn != 0x4e800020 && (insn & 0xfc000002) != 0x48000000)
|
||
|
+ error("blr or b expected at the end of %s", name);
|
||
|
copy_size = p - p_start;
|
||
|
}
|
||
|
#elif defined(HOST_S390)
|