@@ -368,6 +368,7 @@ static op_string_t op_string(const Instr &instr) {
368368 case WctlType::JOIN : return {" JOIN" , " " };
369369 case WctlType::BAR : return {" BAR" , " " };
370370 case WctlType::PRED : return {wctlArgs.is_neg ? " PRED.N" :" PRED" , " " };
371+ case WctlType::WSCHED : return {" WSCHED" , " priority=" + std::to_string (wctlArgs.priority ) + " , yield=" + std::to_string (wctlArgs.yield )};
371372 default :
372373 std::abort ();
373374 }
@@ -1032,16 +1033,22 @@ void Emulator::decode(uint32_t code, uint32_t wid, uint64_t uuid) {
10321033 instr->setSrcReg (1 , rs2, RegType::Integer);
10331034 wctlArgs.is_neg = (rd != 0 );
10341035 break ;
1036+ case 6 : // WSCHED
1037+ instr->setOpType (WctlType::WSCHED );
1038+ wctlArgs.priority = rs1;
1039+ wctlArgs.yield = rs2;
1040+ break ;
10351041 default :
10361042 std::abort ();
10371043 }
10381044 instr->setArgs (wctlArgs);
10391045 ibuffer.push_back (instr);
10401046 } break ;
1041- case 1 : { // VOTE
1047+ case 1 : { // VOTE & SHUFFLE
10421048 auto instr = std::allocate_shared<Instr>(instr_pool_, uuid, FUType::ALU );
10431049 instr->setDestReg (rd, RegType::Integer);
10441050 instr->setSrcReg (0 , rs1, RegType::Integer);
1051+ instr->setSrcReg (1 , rs2, RegType::Integer);
10451052 switch (funct3) {
10461053 case 0 :
10471054 instr->setOpType (VoteType::ALL );
@@ -1057,19 +1064,19 @@ void Emulator::decode(uint32_t code, uint32_t wid, uint64_t uuid) {
10571064 break ;
10581065 case 4 :
10591066 instr->setOpType (ShflType::UP );
1060- instr->setSrcReg (1 , rs2 , RegType::Integer);
1067+ instr->setSrcReg (2 , rs3 , RegType::Integer);
10611068 break ;
10621069 case 5 :
10631070 instr->setOpType (ShflType::DOWN );
1064- instr->setSrcReg (1 , rs2 , RegType::Integer);
1071+ instr->setSrcReg (2 , rs3 , RegType::Integer);
10651072 break ;
10661073 case 6 :
10671074 instr->setOpType (ShflType::BFLY );
1068- instr->setSrcReg (1 , rs2 , RegType::Integer);
1075+ instr->setSrcReg (2 , rs3 , RegType::Integer);
10691076 break ;
10701077 case 7 :
10711078 instr->setOpType (ShflType::IDX );
1072- instr->setSrcReg (1 , rs2 , RegType::Integer);
1079+ instr->setSrcReg (2 , rs3 , RegType::Integer);
10731080 break ;
10741081 default :
10751082 std::abort ();
0 commit comments