cpu: make BEQ and BNEQ only PC-relative
This commit is contained in:
@@ -186,16 +186,16 @@ begin
|
||||
alu_b <= reg_q(regn_1);
|
||||
reg_d(15)(0) <= alu_flag;
|
||||
|
||||
when "1101" => -- BEQ [rn, imm] (jump to [rn, imm] if flag is set, imm is signed 8 bits)
|
||||
when "1101" => -- BEQ imm (jump to [pc, imm] if flag is set, imm is signed 12 bits)
|
||||
if reg_q(15)(0) = '1' then
|
||||
reg_d(14) <= std_logic_vector(signed(reg_q(regn_0)) + signed(inst(7 downto 0) & '0'));
|
||||
reg_d(14) <= std_logic_vector(signed(reg_q(14)) + signed(inst(11 downto 0) & '0'));
|
||||
cpu_state_next <= BRANCH;
|
||||
end if;
|
||||
when "1110" => -- SET rd, imm (rd := imm, imm is 8 bit)
|
||||
reg_d(regn_0) <= x"00" & inst(7 downto 0);
|
||||
when "1111" => -- BNEQ [rn, imm]
|
||||
when "1111" => -- BNEQ imm
|
||||
if reg_q(15)(0) = '0' then
|
||||
reg_d(14) <= std_logic_vector(signed(reg_q(regn_0)) + signed(inst(7 downto 0) & '0'));
|
||||
reg_d(14) <= std_logic_vector(signed(reg_q(14)) + signed(inst(11 downto 0) & '0'));
|
||||
cpu_state_next <= BRANCH;
|
||||
end if;
|
||||
|
||||
|
Reference in New Issue
Block a user