Lines Matching refs:instr

311 bool Assembler::IsBranch(Instr instr) {
312 return (instr & kBaseOpcodeMask) == BRANCH;
315 bool Assembler::IsCBranch(Instr instr) {
316 int Op = instr & kRvcOpcodeMask;
319 bool Assembler::IsJump(Instr instr) {
320 int Op = instr & kBaseOpcodeMask;
324 bool Assembler::IsNop(Instr instr) { return instr == kNopByte; }
326 bool Assembler::IsJal(Instr instr) { return (instr & kBaseOpcodeMask) == JAL; }
328 bool Assembler::IsJalr(Instr instr) {
329 return (instr & kBaseOpcodeMask) == JALR;
332 bool Assembler::IsCJal(Instr instr) {
333 return (instr & kRvcOpcodeMask) == RO_C_J;
336 bool Assembler::IsLui(Instr instr) { return (instr & kBaseOpcodeMask) == LUI; }
337 bool Assembler::IsAuipc(Instr instr) {
338 return (instr & kBaseOpcodeMask) == AUIPC;
340 bool Assembler::IsAddiw(Instr instr) {
341 return (instr & (kBaseOpcodeMask | kFunct3Mask)) == RO_ADDIW;
343 bool Assembler::IsAddi(Instr instr) {
344 return (instr & (kBaseOpcodeMask | kFunct3Mask)) == RO_ADDI;
346 bool Assembler::IsOri(Instr instr) {
347 return (instr & (kBaseOpcodeMask | kFunct3Mask)) == RO_ORI;
349 bool Assembler::IsSlli(Instr instr) {
350 return (instr & (kBaseOpcodeMask | kFunct3Mask)) == RO_SLLI;
353 bool Assembler::IsLd(Instr instr) {
354 return (instr & (kBaseOpcodeMask | kFunct3Mask)) == RO_LD;
374 Instr instr = instruction->InstructionBits();
379 int32_t imm13 = BranchOffset(instr);
388 int32_t imm21 = JumpOffset(instr);
397 int32_t imm12 = instr >> 20;
420 Instr instr_auipc = instr;
439 if (instr == kEndOfJumpChain) {
443 ((instr & static_cast<int32_t>(kImm16Mask)) << 16) >> 14;
451 Instr instr) {
456 instr &= ~kBImm12Mask;
462 return instr | (imm12 & kBImm12Mask);
465 static inline Instr SetLdOffset(int32_t offset, Instr instr) {
466 DCHECK(Assembler::IsLd(instr));
468 instr &= ~kImm12Mask;
470 return instr | (imm12 & kImm12Mask);
473 static inline Instr SetAuipcOffset(int32_t offset, Instr instr) {
474 DCHECK(Assembler::IsAuipc(instr));
476 instr = (instr & ~kImm31_12Mask) | ((offset & kImm19_0Mask) << 12);
477 return instr;
480 static inline Instr SetJalrOffset(int32_t offset, Instr instr) {
481 DCHECK(Assembler::IsJalr(instr));
483 instr &= ~kImm12Mask;
485 DCHECK(Assembler::IsJalr(instr | (imm12 & kImm12Mask)));
486 DCHECK_EQ(Assembler::JalrOffset(instr | (imm12 & kImm12Mask)), offset);
487 return instr | (imm12 & kImm12Mask);
490 static inline Instr SetJalOffset(int32_t pos, int32_t target_pos, Instr instr) {
491 DCHECK(Assembler::IsJal(instr));
496 instr &= ~kImm20Mask;
502 return instr | (imm20 & kImm20Mask);
506 Instr instr) {
507 DCHECK(Assembler::IsCJal(instr));
511 instr &= ~kImm11Mask;
517 DCHECK(Assembler::IsCJal(instr | (imm11 & kImm11Mask)));
518 return instr | (imm11 & kImm11Mask);
521 Instr instr) {
522 DCHECK(Assembler::IsCBranch(instr));
527 instr &= ~kRvcBImm8Mask;
531 DCHECK(Assembler::IsCBranch(instr | imm8 & kRvcBImm8Mask));
533 return instr | (imm8 & kRvcBImm8Mask);
548 Instr instr = instruction->InstructionBits();
552 instr = SetBranchOffset(pos, target_pos, instr);
553 instr_at_put(pos, instr);
556 DCHECK(IsJal(instr));
557 instr = SetJalOffset(pos, target_pos, instr);
558 instr_at_put(pos, instr);
566 Instr instr_auipc = instr;
573 Instr instr = JAL;
574 instr = SetJalOffset(pos, target_pos, instr);
575 DCHECK(IsJal(instr));
576 DCHECK(JumpOffset(instr) == offset);
577 instr_at_put(pos, instr);
596 ShortInstr short_instr = SetCJalOffset(pos, target_pos, instr);
601 instr = SetCBranchOffset(pos, target_pos, instr);
602 instr_at_put(pos, instr);
610 disassembleInstr(instr);
624 Instr instr = instr_at(l.pos());
625 if ((instr & ~kImm16Mask) == 0) {
628 PrintF("%d\n", instr);
655 Instr instr = instr_at(fixup_pos);
660 if (IsBranch(instr)) {
672 } else if (IsJal(instr)) {
729 int Assembler::BranchOffset(Instr instr) {
732 int32_t imm13 = ((instr & 0xf00) >> 7) | ((instr & 0x7e000000) >> 20) |
733 ((instr & 0x80) << 4) | ((instr & 0x80000000) >> 19);
738 int Assembler::JumpOffset(Instr instr) {
739 int32_t imm21 = ((instr & 0x7fe00000) >> 20) | ((instr & 0x100000) >> 9) |
740 (instr & 0xff000) | ((instr & 0x80000000) >> 11);
745 int Assembler::CJumpOffset(Instr instr) {
746 int32_t imm12 = ((instr & 0x4) << 3) | ((instr & 0x38) >> 2) |
747 ((instr & 0x40) << 1) | ((instr & 0x80) >> 1) |
748 ((instr & 0x100) << 2) | ((instr & 0x600) >> 1) |
749 ((instr & 0x800) >> 7) | ((instr & 0x1000) >> 1);
780 int Assembler::LdOffset(Instr instr) {
781 DCHECK(IsLd(instr));
782 int32_t imm12 = static_cast<int32_t>(instr & kImm12Mask) >> 20;
786 int Assembler::JalrOffset(Instr instr) {
787 DCHECK(IsJalr(instr));
788 int32_t imm12 = static_cast<int32_t>(instr & kImm12Mask) >> 20;
792 int Assembler::AuipcOffset(Instr instr) {
793 DCHECK(IsAuipc(instr));
794 int32_t imm20 = static_cast<int32_t>(instr & kImm20Mask);
805 void Assembler::disassembleInstr(Instr instr) {
811 disasm.InstructionDecode(disasm_buffer, reinterpret_cast<byte*>(&instr));
821 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
824 emit(instr);
831 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
834 emit(instr);
841 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
844 emit(instr);
851 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
854 emit(instr);
861 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
864 emit(instr);
871 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
874 emit(instr);
882 Instr instr = opcode | (rd.code() << kRdShift) | (frm << kFunct3Shift) |
885 emit(instr);
893 Instr instr = opcode | (rd.code() << kRdShift) | (frm << kFunct3Shift) |
896 emit(instr);
904 Instr instr = AMO | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
907 emit(instr);
913 Instr instr = opcode | (rd.code() << kRdShift) | (frm << kFunct3Shift) |
916 emit(instr);
923 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
925 emit(instr);
932 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
934 emit(instr);
941 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
944 emit(instr);
951 Instr instr = opcode | (rd.code() << kRdShift) | (funct3 << kFunct3Shift) |
954 emit(instr);
961 Instr instr = opcode | ((imm12 & 0x1f) << 7) | // bits 4-0
965 emit(instr);
972 Instr instr = opcode | ((imm12 & 0x1f) << 7) | // bits 4-0
976 emit(instr);
983 Instr instr = opcode | ((imm13 & 0x800) >> 4) | // bit 11
989 emit(instr);
994 Instr instr = opcode | (rd.code() << kRdShift) | (imm20 << kImm20Shift);
995 emit(instr);
1000 Instr instr = opcode | (rd.code() << kRdShift) |
1005 emit(instr);
1011 ShortInstr instr = opcode | (rs2.code() << kRvcRs2Shift) |
1013 emit(instr);
1020 ShortInstr instr = opcode | ((rs2.code() & 0x7) << kRvcRs2sShift) |
1023 emit(instr);
1029 ShortInstr instr = opcode | ((imm6 & 0x1f) << 2) |
1032 emit(instr);
1038 ShortInstr instr = opcode | ((uimm6 & 0x1f) << 2) |
1041 emit(instr);
1047 ShortInstr instr = opcode | ((uimm6 & 0x1f) << 2) |
1050 emit(instr);
1056 ShortInstr instr = opcode | ((uimm8) << 5) |
1059 emit(instr);
1065 ShortInstr instr = opcode | (uimm6 << 7) | (rs2.code() << kRvcRs2Shift) |
1067 emit(instr);
1073 ShortInstr instr = opcode | (uimm6 << 7) | (rs2.code() << kRvcRs2Shift) |
1075 emit(instr);
1082 ShortInstr instr = opcode | ((uimm5 & 0x3) << 5) |
1086 emit(instr);
1093 ShortInstr instr = opcode | ((uimm5 & 0x3) << 5) |
1097 emit(instr);
1101 ShortInstr instr = opcode | (funct3 << kRvcFunct3Shift) | (uint11 << 2);
1102 emit(instr);
1109 ShortInstr instr = opcode | ((uimm5 & 0x3) << 5) |
1113 emit(instr);
1120 ShortInstr instr = opcode | ((uimm5 & 0x3) << 5) |
1124 emit(instr);
1130 ShortInstr instr = opcode | ((uimm8 & 0x1f) << 2) | ((uimm8 & 0xe0) << 5) |
1133 emit(instr);
1139 ShortInstr instr = opcode | ((imm6 & 0x1f) << 2) | ((imm6 & 0x20) << 7) |
1142 emit(instr);
1149 Instr instr = (funct6 << kRvvFunct6Shift) | opcode | (mask << kRvvVmShift) |
1153 emit(instr);
1159 Instr instr = (funct6 << kRvvFunct6Shift) | opcode | (mask << kRvvVmShift) |
1163 emit(instr);
1169 Instr instr = (funct6 << kRvvFunct6Shift) | opcode | (mask << kRvvVmShift) |
1173 emit(instr);
1180 Instr instr = (funct6 << kRvvFunct6Shift) | opcode | (mask << kRvvVmShift) |
1184 emit(instr);
1191 Instr instr = (funct6 << kRvvFunct6Shift) | opcode | (mask << kRvvVmShift) |
1195 emit(instr);
1202 Instr instr = (funct6 << kRvvFunct6Shift) | opcode | (mask << kRvvVmShift) |
1206 emit(instr);
1212 Instr instr = (funct6 << kRvvFunct6Shift) | OP_MVX | (mask << kRvvVmShift) |
1216 emit(instr);
1222 Instr instr = (funct6 << kRvvFunct6Shift) | OP_IVI | (mask << kRvvVmShift) |
1226 emit(instr);
1234 Instr instr = opcode | ((vd.code() << kRvvVdShift) & kRvvVdMask) |
1242 emit(instr);
1248 Instr instr = opcode | ((vd.code() << kRvvVdShift) & kRvvVdMask) |
1256 emit(instr);
1263 Instr instr = opcode | ((vd.code() << kRvvVdShift) & kRvvVdMask) |
1271 emit(instr);
1277 Instr instr = (funct6 << kRvvFunct6Shift) | opcode | (mask << kRvvVmShift) |
1281 emit(instr);
2872 Instr instr = OP_V | ((rd.code() & 0x1F) << kRvvRdShift) | (0x7 << 12) |
2875 emit(instr);
2882 Instr instr = OP_V | ((rd.code() & 0x1F) << kRvvRdShift) | (0x7 << 12) |
2885 emit(instr);
2889 Instr instr = OP_V | ((rd.code() & 0x1F) << kRvvRdShift) | (0x7 << 12) |
2892 emit(instr);
3599 Instr instr = instr_at(pc);
3601 if (IsLui(instr)) {
3613 Instr instr = instr_at(pc);
3616 if (IsAuipc(instr) && IsJalr(instr1)) {
3618 imm = BrachlongOffset(instr, instr1);
3620 PatchBranchlongOffset(pc, instr, instr1, imm);
3799 Instr* instr = reinterpret_cast<Instr*>(pc);
3800 if (IsAuipc(*instr)) {
3802 int32_t Hi20 = AuipcOffset(*instr);
3811 Instr instr = instr_at(pc);
3814 int num = PatchBranchlongOffset(pc, instr, instr1, (int32_t)imm);
3825 Instr* instr = reinterpret_cast<Instr*>(pc);
3826 if (IsAuipc(*instr)) {
3828 int32_t Hi20 = AuipcOffset(*instr);
3833 int32_t Hi20 = AuipcOffset(*instr);
3943 bool Assembler::IsConstantPoolAt(Instruction* instr) {
3947 Instr instr_value = *reinterpret_cast<Instr*>(instr);
3948 bool result = IsLd(instr_value) && (instr->Rs1Value() == kRegCode_zero_reg) &&
3949 (instr->RdValue() == kRegCode_zero_reg);
3953 Instruction* instr_following = instr + kInstrSize;
3961 int Assembler::ConstantPoolSizeAt(Instruction* instr) {
3962 if (IsConstantPoolAt(instr)) {
3963 return instr->Imm12Value();