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)
|
||||
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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче