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.
This commit is contained in:
Ayke van Laethem
2019-12-21 18:09:40 +01:00
committed by Ron Evans
parent 525ded3d90
commit dffb9fbfa7
+13 -34
View File
@@ -668,8 +668,7 @@ var (
} }
var regType string var regType string
eSize := register.elementSize switch register.elementSize {
switch eSize {
case 4: case 4:
regType = "volatile.Register32" regType = "volatile.Register32"
case 2: case 2:
@@ -677,27 +676,16 @@ var (
case 1: case 1:
regType = "volatile.Register8" regType = "volatile.Register8"
default: default:
eSize = 4
regType = "volatile.Register32" regType = "volatile.Register32"
} }
// insert padding, if needed // insert padding, if needed
if address < register.address { if address < register.address {
bytesNeeded := register.address - address bytesNeeded := register.address - address
switch bytesNeeded { if bytesNeeded == 1 {
case 1: w.WriteString("\t_ byte\n")
w.WriteString("\t_ volatile.Register8\n") } else {
case 2: fmt.Fprintf(w, "\t_ [%d]byte\n", bytesNeeded)
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)
}
} }
address = register.address address = register.address
} }
@@ -707,9 +695,8 @@ var (
// This is a cluster, not a register. Create the cluster type. // This is a cluster, not a register. Create the cluster type.
regType = "struct {\n" regType = "struct {\n"
subaddress := register.address subaddress := register.address
var subregSize uint64
var subregType string
for _, subregister := range register.registers { for _, subregister := range register.registers {
var subregType string
switch subregister.elementSize { switch subregister.elementSize {
case 4: case 4:
subregType = "volatile.Register32" subregType = "volatile.Register32"
@@ -728,21 +715,13 @@ var (
if subaddress != subregister.address { if subaddress != subregister.address {
bytesNeeded := subregister.address - subaddress bytesNeeded := subregister.address - subaddress
if bytesNeeded == 1 { if bytesNeeded == 1 {
regType += "\t\t_ volatile.Register8\n" regType += "\t\t_ byte\n"
} else if bytesNeeded == 2 {
regType += "\t\t_ volatile.Register16\n"
} else { } else {
numSkip := (subregister.address - subaddress) regType += fmt.Sprintf("\t\t_ [%d]byte\n", bytesNeeded)
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)
}
} }
subaddress += bytesNeeded subaddress += bytesNeeded
} }
var subregSize uint64
if subregister.array != -1 { if subregister.array != -1 {
subregSize = uint64(subregister.array * subregister.elementSize) subregSize = uint64(subregister.array * subregister.elementSize)
} else { } else {
@@ -753,11 +732,11 @@ var (
} }
if register.array != -1 { if register.array != -1 {
if subaddress != register.address+uint64(register.elementSize) { if subaddress != register.address+uint64(register.elementSize) {
numSkip := ((register.address + uint64(register.elementSize)) - subaddress) / subregSize bytesNeeded := (register.address + uint64(register.elementSize)) - subaddress
if numSkip <= 1 { if bytesNeeded == 1 {
regType += fmt.Sprintf("\t\t_ %s\n", subregType) regType += "\t_ byte\n"
} else { } else {
regType += fmt.Sprintf("\t\t_ [%d]%s\n", numSkip, subregType) regType += fmt.Sprintf("\t_ [%d]byte\n", bytesNeeded)
} }
} }
} else { } else {