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.
Этот коммит содержится в:
родитель
914cd56ca5
коммит
2788ab0172
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)))
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче