From f4b581f2d1ac69c27a06a328e11763b44544aadb Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Thu, 22 Sep 2022 12:53:33 +0100 Subject: [AArch64] Update FPSR/FPCR fields for FPU and SVE I noticed some missing flags/fields from FPSR and FPCR registers in both the FPU and SVE target descriptions. This patch adds those and makes the SVE versions of FPSR and FPCR use the proper flags/bitfields types. --- gdb/features/aarch64-fpu.c | 3 +++ gdb/features/aarch64-fpu.xml | 14 ++++++++++++++ gdb/features/aarch64-sve.c | 38 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 2 deletions(-) (limited to 'gdb') diff --git a/gdb/features/aarch64-fpu.c b/gdb/features/aarch64-fpu.c index a80b7d4..27e7552 100644 --- a/gdb/features/aarch64-fpu.c +++ b/gdb/features/aarch64-fpu.c @@ -126,8 +126,11 @@ create_feature_aarch64_fpu (struct target_desc *result, long regnum) tdesc_add_flag (type_with_fields, 10, "OFE"); tdesc_add_flag (type_with_fields, 11, "UFE"); tdesc_add_flag (type_with_fields, 12, "IXE"); + tdesc_add_flag (type_with_fields, 13, "EBF"); tdesc_add_flag (type_with_fields, 15, "IDE"); + tdesc_add_bitfield (type_with_fields, "Len", 16, 18); tdesc_add_flag (type_with_fields, 19, "FZ16"); + tdesc_add_bitfield (type_with_fields, "Stride", 20, 21); tdesc_add_bitfield (type_with_fields, "RMode", 22, 23); tdesc_add_flag (type_with_fields, 24, "FZ"); tdesc_add_flag (type_with_fields, 25, "DN"); diff --git a/gdb/features/aarch64-fpu.xml b/gdb/features/aarch64-fpu.xml index 4db5c50..89bbcc0 100644 --- a/gdb/features/aarch64-fpu.xml +++ b/gdb/features/aarch64-fpu.xml @@ -142,11 +142,25 @@ + + + + + + diff --git a/gdb/features/aarch64-sve.c b/gdb/features/aarch64-sve.c index 54182e8..fe25f81 100644 --- a/gdb/features/aarch64-sve.c +++ b/gdb/features/aarch64-sve.c @@ -121,6 +121,40 @@ create_feature_aarch64_sve (struct target_desc *result, long regnum, field_type = tdesc_named_type (feature, "uint8"); tdesc_create_vector (feature, "svep", field_type, 2 * scale); + /* FPSR register type */ + type_with_fields = tdesc_create_flags (feature, "fpsr_flags", 4); + tdesc_add_flag (type_with_fields, 0, "IOC"); + tdesc_add_flag (type_with_fields, 1, "DZC"); + tdesc_add_flag (type_with_fields, 2, "OFC"); + tdesc_add_flag (type_with_fields, 3, "UFC"); + tdesc_add_flag (type_with_fields, 4, "IXC"); + tdesc_add_flag (type_with_fields, 7, "IDC"); + tdesc_add_flag (type_with_fields, 27, "QC"); + tdesc_add_flag (type_with_fields, 28, "V"); + tdesc_add_flag (type_with_fields, 29, "C"); + tdesc_add_flag (type_with_fields, 30, "Z"); + tdesc_add_flag (type_with_fields, 31, "N"); + + /* FPCR register type */ + type_with_fields = tdesc_create_flags (feature, "fpcr_flags", 4); + tdesc_add_flag (type_with_fields, 0, "FIZ"); + tdesc_add_flag (type_with_fields, 1, "AH"); + tdesc_add_flag (type_with_fields, 2, "NEP"); + tdesc_add_flag (type_with_fields, 8, "IOE"); + tdesc_add_flag (type_with_fields, 9, "DZE"); + tdesc_add_flag (type_with_fields, 10, "OFE"); + tdesc_add_flag (type_with_fields, 11, "UFE"); + tdesc_add_flag (type_with_fields, 12, "IXE"); + tdesc_add_flag (type_with_fields, 13, "EBF"); + tdesc_add_flag (type_with_fields, 15, "IDE"); + tdesc_add_bitfield (type_with_fields, "Len", 16, 18); + tdesc_add_flag (type_with_fields, 19, "FZ16"); + tdesc_add_bitfield (type_with_fields, "Stride", 20, 21); + tdesc_add_bitfield (type_with_fields, "RMode", 22, 23); + tdesc_add_flag (type_with_fields, 24, "FZ"); + tdesc_add_flag (type_with_fields, 25, "DN"); + tdesc_add_flag (type_with_fields, 26, "AHP"); + tdesc_create_reg (feature, "z0", regnum++, 1, NULL, 128 * scale, "svev"); tdesc_create_reg (feature, "z1", regnum++, 1, NULL, 128 * scale, "svev"); tdesc_create_reg (feature, "z2", regnum++, 1, NULL, 128 * scale, "svev"); @@ -153,8 +187,8 @@ create_feature_aarch64_sve (struct target_desc *result, long regnum, tdesc_create_reg (feature, "z29", regnum++, 1, NULL, 128 * scale, "svev"); tdesc_create_reg (feature, "z30", regnum++, 1, NULL, 128 * scale, "svev"); tdesc_create_reg (feature, "z31", regnum++, 1, NULL, 128 * scale, "svev"); - tdesc_create_reg (feature, "fpsr", regnum++, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "fpcr", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "fpsr", regnum++, 1, NULL, 32, "fpsr_flags"); + tdesc_create_reg (feature, "fpcr", regnum++, 1, NULL, 32, "fpcr_flags"); tdesc_create_reg (feature, "p0", regnum++, 1, NULL, 16 * scale, "svep"); tdesc_create_reg (feature, "p1", regnum++, 1, NULL, 16 * scale, "svep"); tdesc_create_reg (feature, "p2", regnum++, 1, NULL, 16 * scale, "svep"); -- cgit v1.1