arm64/disassem.c: style and formatting

Reviewed by:	mhorne
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D38899
This commit is contained in:
Mykola Hohsadze 2023-04-18 12:50:33 -03:00 committed by Mitchell Horne
parent c3c20de3b2
commit 5b61ad4b00

View File

@ -28,11 +28,13 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <machine/disassem.h>
#include <machine/armreg.h>
#include <machine/disassem.h>
#include <ddb/ddb.h>
#define ARM64_MAX_TOKEN_LEN 8
@ -82,12 +84,21 @@ struct arm64_insn_token {
* Define generic types for instruction printing.
*/
enum arm64_format_type {
TYPE_01, /* OP <RD>, <RN>, <RM>{, <shift [LSL, LSR, ASR]> #<imm>} SF32/64
OP <RD>, <RN>, #<imm>{, <shift [0, 12]>} SF32/64 */
TYPE_02, /* OP <RT>, [<RN>, #<imm>]{!}] SF32/64
OP <RT>, [<RN>], #<imm>{!} SF32/64
OP <RT>, <RN>, <RM> {, EXTEND AMOUNT } */
TYPE_03, /* OP <RT>, #imm SF32/64 */
/*
* OP <RD>, <RN>, <RM>{, <shift [LSL, LSR, ASR]> #imm} SF32/64
* OP <RD>, <RN>, #<imm>{, <shift [0, 12]>} SF32/64
*/
TYPE_01,
/*
* OP <RT>, [<RN>, #<imm>]{!} SF32/64
* OP <RT>, [<RN>], #<imm>{!} SF32/64
* OP <RT>, <RN>, <RM> {, EXTEND AMOUNT }
*/
TYPE_02,
/* OP <RT>, #imm SF32/64 */
TYPE_03,
};
/*
@ -101,8 +112,8 @@ enum arm64_format_type {
* tokens - array of tokens (operands) inside instruction
*/
struct arm64_insn {
char* name;
char* format;
char *name;
char *format;
enum arm64_format_type type;
uint64_t special_ops;
uint32_t mask;
@ -202,7 +213,7 @@ arm64_disasm_generate_masks(struct arm64_insn *tab)
*/
a = (INSN_SIZE * NBBY) - 1;
while (*format != '\0' && (a >= 0)) {
switch(*format) {
switch (*format) {
case '0':
/* Bit is 0, add to mask and pattern */
mask |= (1 << a);
@ -230,7 +241,8 @@ arm64_disasm_generate_masks(struct arm64_insn *tab)
i++;
format++;
if (i >= ARM64_MAX_TOKEN_LEN) {
printf("ERROR: token too long in op %s\n",
printf("ERROR: "
"token too long in op %s\n",
tab->name);
error = 1;
break;
@ -243,7 +255,8 @@ arm64_disasm_generate_masks(struct arm64_insn *tab)
ret = sscanf(format, "(%d)", &len);
if (ret == 1) {
if (token >= ARM64_MAX_TOKEN_CNT) {
printf("ERROR: to many tokens in op %s\n",
printf("ERROR: "
"too many tokens in op %s\n",
tab->name);
error = 1;
break;
@ -357,7 +370,7 @@ disasm(const struct disasm_interface *di, vm_offset_t loc, int altfmt)
while (i_ptr->name) {
/* If mask is 0 then the parser was not initialized yet */
if ((i_ptr->mask != 0) &&
((insn & i_ptr->mask) == i_ptr->pattern)) {
((insn & i_ptr->mask) == i_ptr->pattern)) {
matchp = 1;
break;
}
@ -388,14 +401,17 @@ disasm(const struct disasm_interface *di, vm_offset_t loc, int altfmt)
/* Print opcode by type */
switch (i_ptr->type) {
case TYPE_01:
/* OP <RD>, <RN>, <RM>{, <shift [LSL, LSR, ASR]> #<imm>} SF32/64
OP <RD>, <RN>, #<imm>{, <shift [0, 12]>} SF32/64 */
/*
* OP <RD>, <RN>, <RM>{, <shift [LSL, LSR, ASR]> #<imm>} SF32/64
* OP <RD>, <RN>, #<imm>{, <shift [0, 12]>} SF32/64
*/
/* Mandatory tokens */
ret = arm64_disasm_read_token(i_ptr, insn, "RD", &rd);
ret |= arm64_disasm_read_token(i_ptr, insn, "RN", &rn);
if (ret != 0) {
printf("ERROR: Missing mandatory token for op %s type %d\n",
printf("ERROR: "
"Missing mandatory token for op %s type %d\n",
i_ptr->name, i_ptr->type);
goto undefined;
}
@ -420,15 +436,18 @@ disasm(const struct disasm_interface *di, vm_offset_t loc, int altfmt)
}
break;
case TYPE_02:
/* OP <RT>, [<RN>, #<imm>]{!}] SF32/64
OP <RT>, [<RN>], #<imm>{!} SF32/64
OP <RT>, <RN>, <RM> {, EXTEND AMOUNT } */
/*
* OP <RT>, [<RN>, #<imm>]{!}] SF32/64
* OP <RT>, [<RN>], #<imm>{!} SF32/64
* OP <RT>, <RN>, <RM> {, EXTEND AMOUNT }
*/
/* Mandatory tokens */
ret = arm64_disasm_read_token(i_ptr, insn, "RT", &rt);
ret |= arm64_disasm_read_token(i_ptr, insn, "RN", &rn);
if (ret != 0) {
printf("ERROR: Missing mandatory token for op %s type %d\n",
printf("ERROR: "
"Missing mandatory token for op %s type %d\n",
i_ptr->name, i_ptr->type);
goto undefined;
}
@ -464,7 +483,8 @@ disasm(const struct disasm_interface *di, vm_offset_t loc, int altfmt)
break;
}
di->di_printf("%s\t%s, ", i_ptr->name, arm64_reg(sf, rt));
di->di_printf("%s\t%s, ", i_ptr->name,
arm64_reg(sf, rt));
if (inside != 0) {
di->di_printf("[%s", arm64_reg(1, rn));
if (imm != 0)
@ -516,7 +536,8 @@ disasm(const struct disasm_interface *di, vm_offset_t loc, int altfmt)
/* Mandatory tokens */
ret = arm64_disasm_read_token(i_ptr, insn, "RT", &rt);
if (ret != 0) {
printf("ERROR: Missing mandatory token for op %s type %d\n",
printf("ERROR: "
"Missing mandatory token for op %s type %d\n",
i_ptr->name, i_ptr->type);
goto undefined;
}
@ -533,13 +554,13 @@ disasm(const struct disasm_interface *di, vm_offset_t loc, int altfmt)
}
di->di_printf("\n");
return(loc + INSN_SIZE);
return (loc + INSN_SIZE);
undefined:
di->di_printf("undefined\t%08x\n", insn);
return(loc + INSN_SIZE);
return (loc + INSN_SIZE);
}
/* Parse format strings at the very beginning */
SYSINIT(arm64_disasm_generate_masks, SI_SUB_DDB_SERVICES,
SI_ORDER_FIRST, arm64_disasm_generate_masks, arm64_i);
SYSINIT(arm64_disasm_generate_masks, SI_SUB_DDB_SERVICES, SI_ORDER_FIRST,
arm64_disasm_generate_masks, arm64_i);