diff --git a/mach/sparc/ce/ce.src/ms_reg.c b/mach/sparc/ce/ce.src/ms_reg.c index 271388995..017fea09e 100644 --- a/mach/sparc/ce/ce.src/ms_reg.c +++ b/mach/sparc/ce/ce.src/ms_reg.c @@ -211,6 +211,14 @@ reg_info *e1, *e2; return (e1->offset - e2->offset); } +static int even(s) +char *s; +{ + int l = strlen(s); + /* Assume ASCII, where even-numbered characters (0,2,4,6,8) are even. */ + return ! (s[l-1] & 1); +} + static save_float_regs() { int i; @@ -220,6 +228,7 @@ static save_float_regs() for (i = 0, offset= 0; i < nr_flt_vars; i++, offset += 8) if ((i+1 < nr_flt_vars && flt_dat[i].offset == flt_dat[i+1].offset-4 && + even(flt_dat[i].reg) && flt_dat[i].size == EM_FSIZE && flt_dat[i+1].size == EM_FSIZE) || (flt_dat[i].size == EM_DSIZE)) { @@ -240,6 +249,7 @@ load_float_regs() for (i = 0, offset= 0; i < nr_flt_vars; i++, offset += 8) if ((i+1 < nr_flt_vars && flt_dat[i].offset == flt_dat[i+1].offset-4 && + even(flt_dat[i].reg) && flt_dat[i].size == EM_FSIZE && flt_dat[i+1].size == EM_FSIZE) || (flt_dat[i].size == EM_DSIZE)) {