X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=blobdiff_plain;f=cpu%2Fsrc%2Fdecoder_b.vhd;h=525d408170a0b6b5bca6b12cfe42ec07f85df0e1;hp=c51e1318ba0ee63d474a5c6799895234c3cb03a8;hb=b7b8e941c868a7ebdfcc3fbf15564dac19251ed6;hpb=7bd87d5c82d7b1f7e86a15b0e6f1940020c87330 diff --git a/cpu/src/decoder_b.vhd b/cpu/src/decoder_b.vhd index c51e131..525d408 100644 --- a/cpu/src/decoder_b.vhd +++ b/cpu/src/decoder_b.vhd @@ -369,20 +369,47 @@ begin instr_s.immediate(31 downto 16) := (others => '1'); end if; - if (instr_s.jmptype = "00") then --- instr_s.op_detail(SUB_OPT) := not instr_s.opcode(0); - instr_s.op_group := JMP_OP; - end if; + case instr_s.jmptype is + when "00" => + instr_s.op_group := JMP_OP; + + when "01" => + instr_s.op_group := JMP_ST_OP; + + when "10" => + instr_s.op_group := JMP_ST_OP; + instr_s.op_detail(RET_OPT) := '1'; + + when "11" => + instr_s.op_group := JMP_OP; + instr_s.op_detail(JMP_REG_OPT) := '1'; + instr_s.op_detail(IMM_OPT) := '1'; + instr_s.immediate := (others => '0'); + + when others => null; + end case; - if (instr_s.jmptype = "01") then - instr_s.op_group := JMP_ST_OP; - -- instr_s.op_detail(RET_OPT) := '0'; - end if; - - if (instr_s.jmptype = "10") then - instr_s.op_group := JMP_ST_OP; - instr_s.op_detail(RET_OPT) := '1'; - end if; +-- if (instr_s.jmptype = "00") then +---- instr_s.op_detail(SUB_OPT) := not instr_s.opcode(0); +-- instr_s.op_group := JMP_OP; +-- end if; +-- +-- if (instr_s.jmptype = "01") then +-- instr_s.op_group := JMP_ST_OP; +-- -- instr_s.op_detail(RET_OPT) := '0'; +-- end if; +-- +-- if (instr_s.jmptype = "10") then +-- instr_s.op_group := JMP_ST_OP; +-- instr_s.op_detail(RET_OPT) := '1'; +-- end if; +-- +-- if (instr_s.jmptype = "11") then +-- instr_s.op_group := JMP_OP; +-- instr_s.op_detail(JMP_REG_OPT) := '1'; +-- instr_s.op_detail(IMM_OPT) := '1'; +-- instr_s.immediate := (others => '0'); +-- end if; if (instr_s.predicates = "1111" or instr_s.jmptype = "10") then instr_s.bp := '0';