diff --git a/compiler.go b/compiler.go index 1d69a4ce..20a3dba9 100644 --- a/compiler.go +++ b/compiler.go @@ -1559,7 +1559,7 @@ func (c *Compiler) parseInstr(frame *Frame, instr ssa.Instruction) error { } store := c.builder.CreateStore(llvmVal, llvmAddr) valType := instr.Addr.Type().(*types.Pointer).Elem() - if valType, ok := valType.(*types.Named); ok && valType.Obj().Name() == "__reg" { + if valType, ok := valType.(*types.Named); ok && valType.Obj().Name() == "__volatile" { // Magic type name to make this store volatile, for memory-mapped // registers. store.SetVolatile(true) @@ -2982,7 +2982,7 @@ func (c *Compiler) parseUnOp(frame *Frame, unop *ssa.UnOp) (llvm.Value, error) { case token.MUL: // *x, dereference pointer valType := unop.X.Type().(*types.Pointer).Elem() load := c.builder.CreateLoad(x, "") - if valType, ok := valType.(*types.Named); ok && valType.Obj().Name() == "__reg" { + if valType, ok := valType.(*types.Named); ok && valType.Obj().Name() == "__volatile" { // Magic type name to make this load volatile, for memory-mapped // registers. load.SetVolatile(true) diff --git a/gen-device-avr.py b/gen-device-avr.py index 93463286..0e10df41 100755 --- a/gen-device-avr.py +++ b/gen-device-avr.py @@ -143,10 +143,10 @@ package {pkgName} import "unsafe" // Magic type name for the compiler. -type __reg uint8 +type __volatile uint8 // Export this magic type name. -type RegValue = __reg +type RegValue = __volatile // Some information about this device. const ( @@ -169,7 +169,7 @@ const ( out.write('\n\t// {description}\n'.format(**peripheral)) for register in peripheral['registers']: for variant in register['variants']: - out.write('\t{name} = (*__reg)(unsafe.Pointer(uintptr(0x{address:x})))\n'.format(**variant)) + out.write('\t{name} = (*__volatile)(unsafe.Pointer(uintptr(0x{address:x})))\n'.format(**variant)) out.write(')\n') for peripheral in device.peripherals: diff --git a/gen-device-svd.py b/gen-device-svd.py index a79c68c6..960b0fc1 100755 --- a/gen-device-svd.py +++ b/gen-device-svd.py @@ -158,10 +158,10 @@ package {pkgName} import "unsafe" // Magic type name for the compiler. -type __reg uint32 +type __volatile uint32 // Export this magic type name. -type RegValue = __reg +type RegValue = __volatile // Some information about this device. const ( @@ -193,14 +193,14 @@ const ( if address < register['address']: numSkip = (register['address'] - address) // 4 if numSkip == 1: - out.write('\t_padding{padNumber} __reg\n'.format(padNumber=padNumber)) + out.write('\t_padding{padNumber} __volatile\n'.format(padNumber=padNumber)) else: - out.write('\t_padding{padNumber} [{num}]__reg\n'.format(padNumber=padNumber, num=numSkip)) + out.write('\t_padding{padNumber} [{num}]__volatile\n'.format(padNumber=padNumber, num=numSkip)) padNumber += 1 - regType = '__reg' + regType = '__volatile' if register['array'] is not None: - regType = '[{}]__reg'.format(register['array']) + regType = '[{}]__volatile'.format(register['array']) out.write('\t{name} {regType}\n'.format(**register, regType=regType)) # next address diff --git a/src/device/arm/arm.go b/src/device/arm/arm.go index 71ce280d..e0c4a070 100644 --- a/src/device/arm/arm.go +++ b/src/device/arm/arm.go @@ -33,8 +33,8 @@ import ( "unsafe" ) -type __reg uint32 -type RegValue = __reg +type __volatile uint32 +type RegValue = __volatile type __asm string @@ -47,7 +47,7 @@ const ( // Nested Vectored Interrupt Controller (NVIC). type NVIC_Type struct { - ISER [8]__reg + ISER [8]__volatile } var NVIC = (*NVIC_Type)(unsafe.Pointer(uintptr(NVIC_BASE)))