https://bugs.kde.org/show_bug.cgi?id=490182

--- Comment #2 from Paul Floyd <pjfl...@wanadoo.fr> ---
That's probably this bit

      case HRcVec128: {
         HReg x21  = hregARM64_X21();  // baseblock
         HReg x9   = hregARM64_X9();   // spill temporary
         vassert(0 == (offsetB & 15)); // check sane alignment
         vassert(offsetB < 4096);

It looks like

   vreg_state[v_idx].spill_offset
         = toShort(con->guest_sizeB * 3 + ss_no * 8);

guest_sizeB is 944, so *3 that's 2832.

ssno is less than this constant

#  define N_SPILL64S (LibVEX_N_SPILL_BYTES / 8)

and

#define LibVEX_N_SPILL_BYTES 4096

Lastly

            for (ss_no = 0; ss_no < N_SPILL64S; ss_no++) {
               if (ss_busy_until_before[ss_no] <= vreg_state[v_idx].live_after)
                  break;
            }
            if (ss_no == N_SPILL64S) {
               vpanic("N_SPILL64S is too low in VEX. Increase and recompile.");
            }

That looks inconsistent with the asserts. ss_no can go up to 512 in the above
code. But the calculation of spill_offset includes guest plus 2 shadows which
leaves only 1264 bytes or 148 spill registers.

Not sure how to fix this.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to