1*080e56a6SChristos Margiolis /* 2*080e56a6SChristos Margiolis * SPDX-License-Identifier: CDDL 1.0 3*080e56a6SChristos Margiolis * 4*080e56a6SChristos Margiolis * Copyright 2023 Christos Margiolis <christos@FreeBSD.org> 5*080e56a6SChristos Margiolis */ 6*080e56a6SChristos Margiolis 7*080e56a6SChristos Margiolis #include <sys/types.h> 8*080e56a6SChristos Margiolis #include <sys/dtrace.h> 9*080e56a6SChristos Margiolis 10*080e56a6SChristos Margiolis #include <machine/riscvreg.h> 11*080e56a6SChristos Margiolis 12*080e56a6SChristos Margiolis #define RVC_MASK 0x03 13*080e56a6SChristos Margiolis 14*080e56a6SChristos Margiolis int dtrace_instr_size(uint8_t * instr)15*080e56a6SChristos Margiolisdtrace_instr_size(uint8_t *instr) 16*080e56a6SChristos Margiolis { 17*080e56a6SChristos Margiolis /* Detect compressed instructions. */ 18*080e56a6SChristos Margiolis if ((~(*instr) & RVC_MASK) == 0) 19*080e56a6SChristos Margiolis return (INSN_SIZE); 20*080e56a6SChristos Margiolis else 21*080e56a6SChristos Margiolis return (INSN_C_SIZE); 22*080e56a6SChristos Margiolis } 23