Lines Matching refs:instr

265 #define	FBT_BDEST(va, instr)	((uintptr_t)(va) + \  argument
266 (((int32_t)(((instr) & FBT_DISP22_MASK) << 10)) >> 8))
267 #define FBT_BPCCDEST(va, instr) ((uintptr_t)(va) + \ argument
268 (((int32_t)(((instr) & FBT_DISP19_MASK) << 13)) >> 11))
269 #define FBT_BPRDEST(va, instr) ((uintptr_t)(va) + \ argument
270 (((int32_t)((FBT_DISP16(instr)) << 16)) >> 14))
276 #define FBT_IS_SAVE(instr) \ argument
277 (FBT_FMT3_OP(instr) == FBT_OP_SAVE && \
278 FBT_FMT3_RD(instr) == FBT_REG_O6 && \
279 FBT_FMT3_RS1(instr) == FBT_REG_O6 && \
280 !(FBT_FMT3_ISIMM(instr) && FBT_FMT3_SIMM13(instr) == 0))
282 #define FBT_IS_BA(instr) (((instr) & ~FBT_DISP22_MASK) == FBT_OP_BA) argument
283 #define FBT_IS_BAPCC(instr) (((instr) & ~FBT_DISP22_MASK) == FBT_OP_BAPCC) argument
285 #define FBT_IS_RDPC(instr) ((FBT_FMT3_OP(instr) == FBT_OP_RD) && \ argument
286 (FBT_FMT3_RD(instr) == FBT_REG_PC))
288 #define FBT_IS_PCRELATIVE(instr) \ argument
289 ((((instr) & FBT_OP_MASK) == FBT_OP0 && \
290 ((instr) & FBT_FMT2_OP2_MASK) != FBT_FMT2_OP2_SETHI) || \
291 ((instr) & FBT_OP_MASK) == FBT_OP1 || \
292 FBT_IS_RDPC(instr))
294 #define FBT_IS_CTI(instr) \ argument
295 ((((instr) & FBT_OP_MASK) == FBT_OP0 && \
296 ((instr) & FBT_FMT2_OP2_MASK) != FBT_FMT2_OP2_SETHI) || \
297 ((instr) & FBT_OP_MASK) == FBT_OP1 || \
298 (FBT_FMT3_OP(instr) == FBT_OP_JMPL) || \
299 (FBT_FMT3_OP(instr) == FBT_OP_RETURN))
387 fbt_patch_entry(uint32_t *instr, uint32_t id, fbt_trampoline_t *tramp, in fbt_patch_entry() argument
391 uint32_t first = *instr; in fbt_patch_entry()
433 uintptr_t ret = (uintptr_t)instr - sizeof (uint32_t); in fbt_patch_entry()
441 uintptr_t ret = (uintptr_t)instr + sizeof (uint32_t); in fbt_patch_entry()
458 ret = FBT_BDEST(instr, *instr); in fbt_patch_entry()
460 ret = FBT_BPCCDEST(instr, *instr); in fbt_patch_entry()
463 delay = *(instr + 1); in fbt_patch_entry()
486 uintptr_t targ = FBT_BPRDEST(instr, first); in fbt_patch_entry()
491 *tinstr++ = *(instr + 1); in fbt_patch_entry()
540 fbt_canpatch_return(uint32_t *instr, int offset, const char *name) in fbt_canpatch_return() argument
544 if (FBT_FMT3_OP(*instr) == FBT_OP_RETURN) { in fbt_canpatch_return()
545 uint32_t delay = *(instr + 1); in fbt_canpatch_return()
547 if (*instr != FBT_RETURN(FBT_REG_I7, 8)) { in fbt_canpatch_return()
559 (void *)instr); in fbt_canpatch_return()
575 name, (void *)instr); in fbt_canpatch_return()
590 "return instruction", name, (void *)instr); in fbt_canpatch_return()
597 if (FBT_FMT3_OP(*(instr + 1)) != FBT_OP_RESTORE) in fbt_canpatch_return()
600 if (FBT_FMT1_OP(*instr) == FBT_OP_CALL) in fbt_canpatch_return()
603 if (FBT_FMT3_OP(*instr) != FBT_OP_JMPL) in fbt_canpatch_return()
606 rd = FBT_FMT3_RD(*instr); in fbt_canpatch_return()
617 "jmpl destination register", name, (void *)instr); in fbt_canpatch_return()
622 fbt_canpatch_retl(uint32_t *instr, int offset, const char *name) in fbt_canpatch_retl() argument
624 if (FBT_FMT1_OP(*instr) == FBT_OP_CALL || in fbt_canpatch_retl()
625 (FBT_FMT3_OP(*instr) == FBT_OP_JMPL && in fbt_canpatch_retl()
626 FBT_FMT3_RD(*instr) == FBT_REG_O7)) { in fbt_canpatch_retl()
637 uint32_t delay = *(instr + 1); in fbt_canpatch_retl()
649 if (*instr < (uintptr_t)instr && in fbt_canpatch_retl()
650 *instr >= (uintptr_t)instr - offset) in fbt_canpatch_retl()
655 name, (void *)instr); in fbt_canpatch_retl()
668 if (fbt_canpatch_retl(instr - 1, 0, name)) in fbt_canpatch_retl()
672 if (FBT_FMT3_OP(*instr) != FBT_OP_JMPL) in fbt_canpatch_retl()
675 if (FBT_FMT3_RD(*instr) != FBT_REG_G0) in fbt_canpatch_retl()
683 fbt_patch_return(uint32_t *instr, uint32_t *funcbase, uint32_t *funclim, in fbt_patch_return() argument
687 uint32_t cti = *instr, restore = *(instr + 1), rs1, dest; in fbt_patch_return()
701 if (FBT_FMT3_OP(*instr) == FBT_OP_RETURN) { in fbt_patch_return()
715 uint32_t delay = *(instr + 1); in fbt_patch_return()
716 ASSERT(*instr == FBT_RETURN(FBT_REG_I7, 8)); in fbt_patch_return()
828 dest = (uintptr_t)instr + (FBT_FMT1_DISP30(cti) << 2); in fbt_patch_return()
839 return (FBT_BAA(instr, va)); in fbt_patch_return()
843 fbt_patch_retl(uint32_t *instr, uint32_t *funcbase, uint32_t *funclim, in fbt_patch_retl() argument
849 uint32_t cti = *instr, dest; in fbt_patch_retl()
862 fbt_canpatch_retl(instr - 1, 0, name)) { in fbt_patch_retl()
863 *tinstr++ = *instr; in fbt_patch_retl()
871 *tinstr++ = *(instr + 1); in fbt_patch_retl()
971 dest = (uintptr_t)instr + (FBT_FMT1_DISP30(cti) << 2); in fbt_patch_retl()
993 return (annul ? FBT_BAA(instr, va) : FBT_BA(instr, va)); in fbt_patch_retl()
1091 uint32_t *instr, *base, *limit; in fbt_provide_module() local
1193 instr = base; in fbt_provide_module()
1225 if ((*instr & FBT_OP_MASK) == FBT_OP0 && in fbt_provide_module()
1226 (*instr & FBT_FMT2_OP2_MASK) != FBT_FMT2_OP2_SETHI && in fbt_provide_module()
1227 (*instr & FBT_FMT2_OP2_MASK) != FBT_FMT2_OP2_BPR) { in fbt_provide_module()
1228 if (!FBT_IS_BA(*instr) && !FBT_IS_BAPCC(*instr)) { in fbt_provide_module()
1238 while (!FBT_IS_SAVE(*instr)) { in fbt_provide_module()
1243 int op = *instr & FBT_OP_MASK; in fbt_provide_module()
1244 int op2 = *instr & FBT_FMT2_OP2_MASK; in fbt_provide_module()
1258 if ((*instr & FBT_ANNUL) || in fbt_provide_module()
1259 !FBT_IS_SAVE(*(instr + 1))) { in fbt_provide_module()
1262 instr++; in fbt_provide_module()
1270 if (++instr == limit) in fbt_provide_module()
1274 if (instr < limit && cti) { in fbt_provide_module()
1288 if (instr == limit) { in fbt_provide_module()
1310 while (++instr < limit) { in fbt_provide_module()
1311 if (FBT_IS_SAVE(*instr)) in fbt_provide_module()
1315 if (instr != limit) in fbt_provide_module()
1319 instr = base; in fbt_provide_module()
1321 if (FBT_IS_CTI(*instr)) { in fbt_provide_module()
1332 if (FBT_IS_CTI(*(instr + 1))) { in fbt_provide_module()
1342 if (FBT_IS_PCRELATIVE(*(instr + 1))) { in fbt_provide_module()
1356 (void) fbt_patch_entry(instr, FBT_ESTIMATE_ID, in fbt_provide_module()
1365 fbt->fbtp_patchval = FBT_BAA(instr, tramp.fbtt_va); in fbt_provide_module()
1367 if (!fbt_patch_entry(instr, fbt->fbtp_id, in fbt_provide_module()
1377 ((uintptr_t)instr - (uintptr_t)mp->text)); in fbt_provide_module()
1378 fbt->fbtp_savedval = *instr; in fbt_provide_module()
1388 if (++instr == limit) in fbt_provide_module()
1391 offset = (uintptr_t)instr - (uintptr_t)base; in fbt_provide_module()
1393 if (!(*canpatch)(instr, offset, name)) in fbt_provide_module()
1399 (void) (*patch)(instr, base, limit, in fbt_provide_module()
1421 if ((fbt->fbtp_patchval = (*patch)(instr, base, limit, offset, in fbt_provide_module()
1429 ((uintptr_t)instr - (uintptr_t)mp->text)); in fbt_provide_module()
1430 fbt->fbtp_savedval = *instr; in fbt_provide_module()