all: rename __reg to __volatile

It is less magical now: it only marks loads and stores as volatile. So
the name '__reg' is a bit wrong now.
Этот коммит содержится в:
Ayke van Laethem 2018-09-12 22:05:41 +02:00
родитель 914cd56ca5
коммит 2788ab0172
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED
4 изменённых файлов: 14 добавлений и 14 удалений

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

@ -1559,7 +1559,7 @@ func (c *Compiler) parseInstr(frame *Frame, instr ssa.Instruction) error {
} }
store := c.builder.CreateStore(llvmVal, llvmAddr) store := c.builder.CreateStore(llvmVal, llvmAddr)
valType := instr.Addr.Type().(*types.Pointer).Elem() 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 // Magic type name to make this store volatile, for memory-mapped
// registers. // registers.
store.SetVolatile(true) 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 case token.MUL: // *x, dereference pointer
valType := unop.X.Type().(*types.Pointer).Elem() valType := unop.X.Type().(*types.Pointer).Elem()
load := c.builder.CreateLoad(x, "") 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 // Magic type name to make this load volatile, for memory-mapped
// registers. // registers.
load.SetVolatile(true) load.SetVolatile(true)

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

@ -143,10 +143,10 @@ package {pkgName}
import "unsafe" import "unsafe"
// Magic type name for the compiler. // Magic type name for the compiler.
type __reg uint8 type __volatile uint8
// Export this magic type name. // Export this magic type name.
type RegValue = __reg type RegValue = __volatile
// Some information about this device. // Some information about this device.
const ( const (
@ -169,7 +169,7 @@ const (
out.write('\n\t// {description}\n'.format(**peripheral)) out.write('\n\t// {description}\n'.format(**peripheral))
for register in peripheral['registers']: for register in peripheral['registers']:
for variant in register['variants']: 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') out.write(')\n')
for peripheral in device.peripherals: for peripheral in device.peripherals:

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

@ -158,10 +158,10 @@ package {pkgName}
import "unsafe" import "unsafe"
// Magic type name for the compiler. // Magic type name for the compiler.
type __reg uint32 type __volatile uint32
// Export this magic type name. // Export this magic type name.
type RegValue = __reg type RegValue = __volatile
// Some information about this device. // Some information about this device.
const ( const (
@ -193,14 +193,14 @@ const (
if address < register['address']: if address < register['address']:
numSkip = (register['address'] - address) // 4 numSkip = (register['address'] - address) // 4
if numSkip == 1: if numSkip == 1:
out.write('\t_padding{padNumber} __reg\n'.format(padNumber=padNumber)) out.write('\t_padding{padNumber} __volatile\n'.format(padNumber=padNumber))
else: 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 padNumber += 1
regType = '__reg' regType = '__volatile'
if register['array'] is not None: 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)) out.write('\t{name} {regType}\n'.format(**register, regType=regType))
# next address # next address

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

@ -33,8 +33,8 @@ import (
"unsafe" "unsafe"
) )
type __reg uint32 type __volatile uint32
type RegValue = __reg type RegValue = __volatile
type __asm string type __asm string
@ -47,7 +47,7 @@ const (
// Nested Vectored Interrupt Controller (NVIC). // Nested Vectored Interrupt Controller (NVIC).
type NVIC_Type struct { type NVIC_Type struct {
ISER [8]__reg ISER [8]__volatile
} }
var NVIC = (*NVIC_Type)(unsafe.Pointer(uintptr(NVIC_BASE))) var NVIC = (*NVIC_Type)(unsafe.Pointer(uintptr(NVIC_BASE)))