From dffb9fbfa7a4229044bb4d67f8b9354f3d28fd94 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 21 Dec 2019 18:09:40 +0100 Subject: [PATCH] tools: use byte padding to skip unused register ranges This simplifies the code. The fields are blank anyway so there is no way to access them anyway (volatile or not). Also do some other related simplifications of the code that result from this change. --- tools/gen-device-svd/gen-device-svd.go | 47 +++++++------------------- 1 file changed, 13 insertions(+), 34 deletions(-) diff --git a/tools/gen-device-svd/gen-device-svd.go b/tools/gen-device-svd/gen-device-svd.go index 2a3d0391..cef0365d 100755 --- a/tools/gen-device-svd/gen-device-svd.go +++ b/tools/gen-device-svd/gen-device-svd.go @@ -668,8 +668,7 @@ var ( } var regType string - eSize := register.elementSize - switch eSize { + switch register.elementSize { case 4: regType = "volatile.Register32" case 2: @@ -677,27 +676,16 @@ var ( case 1: regType = "volatile.Register8" default: - eSize = 4 regType = "volatile.Register32" } // insert padding, if needed if address < register.address { bytesNeeded := register.address - address - switch bytesNeeded { - case 1: - w.WriteString("\t_ volatile.Register8\n") - case 2: - w.WriteString("\t_ volatile.Register16\n") - case 3: - w.WriteString("\t_ [3]volatile.Register8\n") - default: - numSkip := (register.address - address) / uint64(eSize) - if numSkip == 1 { - fmt.Fprintf(w, "\t_ %s\n", regType) - } else { - fmt.Fprintf(w, "\t_ [%d]%s\n", numSkip, regType) - } + if bytesNeeded == 1 { + w.WriteString("\t_ byte\n") + } else { + fmt.Fprintf(w, "\t_ [%d]byte\n", bytesNeeded) } address = register.address } @@ -707,9 +695,8 @@ var ( // This is a cluster, not a register. Create the cluster type. regType = "struct {\n" subaddress := register.address - var subregSize uint64 - var subregType string for _, subregister := range register.registers { + var subregType string switch subregister.elementSize { case 4: subregType = "volatile.Register32" @@ -728,21 +715,13 @@ var ( if subaddress != subregister.address { bytesNeeded := subregister.address - subaddress if bytesNeeded == 1 { - regType += "\t\t_ volatile.Register8\n" - } else if bytesNeeded == 2 { - regType += "\t\t_ volatile.Register16\n" + regType += "\t\t_ byte\n" } else { - numSkip := (subregister.address - subaddress) - if numSkip < 1 { - continue - } else if numSkip == 1 { - regType += "\t\t_ volatile.Register8\n" - } else { - regType += fmt.Sprintf("\t\t_ [%d]volatile.Register8\n", numSkip) - } + regType += fmt.Sprintf("\t\t_ [%d]byte\n", bytesNeeded) } subaddress += bytesNeeded } + var subregSize uint64 if subregister.array != -1 { subregSize = uint64(subregister.array * subregister.elementSize) } else { @@ -753,11 +732,11 @@ var ( } if register.array != -1 { if subaddress != register.address+uint64(register.elementSize) { - numSkip := ((register.address + uint64(register.elementSize)) - subaddress) / subregSize - if numSkip <= 1 { - regType += fmt.Sprintf("\t\t_ %s\n", subregType) + bytesNeeded := (register.address + uint64(register.elementSize)) - subaddress + if bytesNeeded == 1 { + regType += "\t_ byte\n" } else { - regType += fmt.Sprintf("\t\t_ [%d]%s\n", numSkip, subregType) + regType += fmt.Sprintf("\t_ [%d]byte\n", bytesNeeded) } } } else {