From 7607dacfc4ebed99378b130afc8f7553079b9f09 Mon Sep 17 00:00:00 2001 From: Luke Wren Date: Mon, 20 Mar 2023 06:32:20 +0000 Subject: [PATCH] Fix incorrect register order within stack frame for push/pop --- hdl/hazard3_instr_decompress.v | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hdl/hazard3_instr_decompress.v b/hdl/hazard3_instr_decompress.v index 18d33e3..4c9853f 100644 --- a/hdl/hazard3_instr_decompress.v +++ b/hdl/hazard3_instr_decompress.v @@ -125,15 +125,15 @@ wire [3:0] zcmp_rlist = instr_in[7:4]; wire [3:0] zcmp_n_regs = zcmp_rlist == 4'hf ? 4'hd : zcmp_rlist - 4'h3; wire [11:0] zcmp_stack_adj_base = - zcmp_rlist[3] == 1'b0 ? 12'h010 : - zcmp_rlist[3:2] == 2'h2 ? 12'h020 : - zcmp_rlist[3:0] == 4'hf ? 12'h040 : 12'h030; + zcmp_rlist == 4'hf ? 12'h040 : + zcmp_rlist >= 4'hc ? 12'h030 : + zcmp_rlist >= 4'h8 ? 12'h020 : 12'h010; wire [11:0] zcmp_stack_adj = zcmp_stack_adj_base + {6'h00, instr_in[3:2], 4'h0}; // Note we perform all load/stores before moving the stack pointer. -wire [11:0] zcmp_stack_lw_offset = -{6'h00, {uop_ctr + 4'h1}, 2'h0} + zcmp_stack_adj; -wire [11:0] zcmp_stack_sw_offset = -{6'h00, {uop_ctr + 4'h1}, 2'h0}; +wire [11:0] zcmp_stack_lw_offset = -{6'h00, {zcmp_n_regs - uop_ctr}, 2'h0} + zcmp_stack_adj; +wire [11:0] zcmp_stack_sw_offset = -{6'h00, {zcmp_n_regs - uop_ctr}, 2'h0}; wire [4:0] zcmp_ls_reg = uop_ctr == 4'h0 ? 5'd01 : // ra