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.
Этот коммит содержится в:
Ayke van Laethem 2019-12-21 18:09:40 +01:00 коммит произвёл Ron Evans
родитель 525ded3d90
коммит dffb9fbfa7

Просмотреть файл

@ -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")
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 { } else {
fmt.Fprintf(w, "\t_ [%d]%s\n", numSkip, regType) fmt.Fprintf(w, "\t_ [%d]byte\n", bytesNeeded)
}
} }
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 {