Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/dev/dtrace/riscv/dtrace_subr.c
Show First 20 Lines • Show All 248 Lines • ▼ Show 20 Lines | |||||
static int | static int | ||||
dtrace_invop_start(struct trapframe *frame) | dtrace_invop_start(struct trapframe *frame) | ||||
{ | { | ||||
register_t *sp; | register_t *sp; | ||||
uint32_t uimm; | uint32_t uimm; | ||||
uint32_t imm; | uint32_t imm; | ||||
int invop; | int invop; | ||||
invop = dtrace_invop(frame->tf_sepc, frame, frame->tf_sepc); | invop = dtrace_invop(frame->tf_sepc, frame, frame->tf_a[0]); | ||||
if (invop == 0) | if (invop == 0) | ||||
return (-1); | return (-1); | ||||
if (match_opcode(invop, (MATCH_SD | RS2_RA | RS1_SP), | if (match_opcode(invop, (MATCH_SD | RS2_RA | RS1_SP), | ||||
(MASK_SD | RS2_MASK | RS1_MASK))) { | (MASK_SD | RS2_MASK | RS1_MASK))) { | ||||
/* Non-compressed store of ra to sp */ | /* Non-compressed store of ra to sp */ | ||||
imm = (invop >> 7) & 0x1f; | imm = (invop >> 7) & 0x1f; | ||||
imm |= ((invop >> 25) & 0x7f) << 5; | imm |= ((invop >> 25) & 0x7f) << 5; | ||||
▲ Show 20 Lines • Show All 51 Lines • Show Last 20 Lines |