Skip to content

Commit

Permalink
SH7604: fix MAC instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
srg320 committed Oct 4, 2023
1 parent 956bdb8 commit e5edb8a
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions SH7604/MULT.sv
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ module SH7604_MULT (

wire [63:0] SRES = $signed(MA) * $signed(MB);
wire [63:0] URES = $unsigned(MA) * $unsigned(MB);
wire [63:0] ACC = $signed({MACH,MACL}) + $signed(SRES);
wire [63:0] ACC64 = $signed({MACH,MACL}) + $signed(SRES);
wire [32:0] ACC32 = $signed({MACL[31],MACL}) + $signed(SRES[32:0]);

always @(posedge CLK or negedge RST_N) begin
bit MUL_EXEC;
Expand Down Expand Up @@ -113,23 +114,28 @@ module SH7604_MULT (

if (MACW_EXEC) begin
if (!SAT) begin
{MACH,MACL} <= ACC;
{MACH,MACL} <= ACC64;
end else begin
if (ACC[63:32] != {32{ACC[31]}}) begin
MACL <= {~ACC[31],{31{ACC[31]}}};
if (ACC32[32] != ACC32[31]) begin
MACL <= {ACC32[32],{31{~ACC32[32]}}};
MACH <= 32'h00000001;
end else begin
{MACH,MACL} <= ACC;
MACL <= ACC32[31:0];
MACH <= 32'h00000000;
end
end
MACW_EXEC <= 0;
end

if (MACL_EXEC) begin
if (!SAT) begin
{MACH,MACL} <= ACC;
{MACH,MACL} <= ACC64;
end else begin
{MACH,MACL} <= {{16{ACC[63]}},ACC[47:0]};
if (ACC64[63:48] != {16{ACC64[47]}}) begin
{MACH,MACL} <= {{16{ACC64[63]}},ACC64[63],{47{~ACC64[63]}}};
end else begin
{MACH,MACL} <= ACC64;
end
end
MACL_EXEC <= 0;
end
Expand Down

0 comments on commit e5edb8a

Please sign in to comment.