diff --git a/src/machine/machine_atsamd21.go b/src/machine/machine_atsamd21.go index b46dcef940..0a0d013327 100644 --- a/src/machine/machine_atsamd21.go +++ b/src/machine/machine_atsamd21.go @@ -299,7 +299,7 @@ func InitADC() { // #define ADC_FUSES_LINEARITY_1_Msk (0x7u << ADC_FUSES_LINEARITY_1_Pos) // #define ADC_FUSES_LINEARITY_1(value) ((ADC_FUSES_LINEARITY_1_Msk & ((value) << ADC_FUSES_LINEARITY_1_Pos))) - biasFuse := *(*uint32)(unsafe.Pointer(uintptr(0x00806020) + 4)) + biasFuse := *(*uint32)(unsafe.Add(0x00806020, 4)) bias := uint16(biasFuse>>3) & uint16(0x7) // ADC Linearity bits 4:0 @@ -307,7 +307,7 @@ func InitADC() { linearity := uint16(linearity0Fuse>>27) & uint16(0x1f) // ADC Linearity bits 7:5 - linearity1Fuse := *(*uint32)(unsafe.Pointer(uintptr(0x00806020) + 4)) + linearity1Fuse := *(*uint32)(unsafe.Add(0x00806020, 4)) linearity |= uint16(linearity1Fuse) & uint16(0x7) << 5 // set calibration @@ -1923,7 +1923,7 @@ func (f flashBlockDevice) WriteAt(p []byte, off int64) (n int, err error) { for j := 0; j < len(padded); j += int(f.WriteBlockSize()) { // page buffer is 64 bytes long, but only 4 bytes can be written at once for k := 0; k < int(f.WriteBlockSize()); k += 4 { - *(*uint32)(unsafe.Pointer(address + uintptr(k))) = binary.LittleEndian.Uint32(padded[j+k : j+k+4]) + *(*uint32)(unsafe.Add(address, k)) = binary.LittleEndian.Uint32(padded[j+k : j+k+4]) } sam.NVMCTRL.SetADDR(uint32(address >> 1)) diff --git a/src/machine/machine_atsamd21_usb.go b/src/machine/machine_atsamd21_usb.go index e7faec8ecb..d232e8f1cf 100644 --- a/src/machine/machine_atsamd21_usb.go +++ b/src/machine/machine_atsamd21_usb.go @@ -103,7 +103,7 @@ func handlePadCalibration() { // #define USB_FUSES_TRIM_Msk (0x7u << USB_FUSES_TRIM_Pos) // #define USB_FUSES_TRIM(value) ((USB_FUSES_TRIM_Msk & ((value) << USB_FUSES_TRIM_Pos))) // - fuse := *(*uint32)(unsafe.Pointer(uintptr(0x00806020) + 4)) + fuse := *(*uint32)(unsafe.Add(0x00806020, 4)) calibTransN := uint16(fuse>>13) & uint16(0x1f) calibTransP := uint16(fuse>>18) & uint16(0x1f) calibTrim := uint16(fuse>>23) & uint16(0x7) diff --git a/src/machine/machine_atsamd51.go b/src/machine/machine_atsamd51.go index 158be4911b..0542268cbc 100644 --- a/src/machine/machine_atsamd51.go +++ b/src/machine/machine_atsamd51.go @@ -2188,7 +2188,7 @@ func (f flashBlockDevice) WriteAt(p []byte, off int64) (n int, err error) { for j := 0; j < len(padded); j += int(f.WriteBlockSize()) { // page buffer is 512 bytes long, but only 4 bytes can be written at once for k := 0; k < int(f.WriteBlockSize()); k += 4 { - *(*uint32)(unsafe.Pointer(address + uintptr(k))) = binary.LittleEndian.Uint32(padded[j+k : j+k+4]) + *(*uint32)(unsafe.Add(address, k)) = binary.LittleEndian.Uint32(padded[j+k : j+k+4]) } sam.NVMCTRL.SetADDR(uint32(address)) diff --git a/src/machine/machine_atsamd51_usb.go b/src/machine/machine_atsamd51_usb.go index 49b44739a3..d0baff4da4 100644 --- a/src/machine/machine_atsamd51_usb.go +++ b/src/machine/machine_atsamd51_usb.go @@ -106,7 +106,7 @@ func handlePadCalibration() { // #define USB_FUSES_TRIM_Msk (0x7u << USB_FUSES_TRIM_Pos) // #define USB_FUSES_TRIM(value) ((USB_FUSES_TRIM_Msk & ((value) << USB_FUSES_TRIM_Pos))) // - fuse := *(*uint32)(unsafe.Pointer(uintptr(0x00806020) + 4)) + fuse := *(*uint32)(unsafe.Add(0x00806020, 4)) calibTransN := uint16(fuse>>13) & uint16(0x1f) calibTransP := uint16(fuse>>18) & uint16(0x1f) calibTrim := uint16(fuse>>23) & uint16(0x7) diff --git a/src/machine/machine_esp32_i2c.go b/src/machine/machine_esp32_i2c.go index 746e722dc2..0676704ef1 100644 --- a/src/machine/machine_esp32_i2c.go +++ b/src/machine/machine_esp32_i2c.go @@ -389,7 +389,7 @@ func (i2c *I2C) SetBaudRate(br uint32) error { } func (p Pin) pinReg() *volatile.Register32 { - return (*volatile.Register32)(unsafe.Pointer((uintptr(unsafe.Pointer(&esp.GPIO.PIN0)) + uintptr(p)*4))) + return (*volatile.Register32)(unsafe.Add(unsafe.Pointer(&esp.GPIO.PIN0), uintptr(p)*4)) } func nextAddress(reg *volatile.Register32) *volatile.Register32 { diff --git a/src/machine/machine_esp32c3.go b/src/machine/machine_esp32c3.go index 2fd1746b33..6c274242d2 100644 --- a/src/machine/machine_esp32c3.go +++ b/src/machine/machine_esp32c3.go @@ -142,7 +142,7 @@ func (p Pin) outFunc() *volatile.Register32 { } func (p Pin) pinReg() *volatile.Register32 { - return (*volatile.Register32)(unsafe.Pointer((uintptr(unsafe.Pointer(&esp.GPIO.PIN0)) + uintptr(p)*4))) + return (*volatile.Register32)(unsafe.Add(unsafe.Pointer(&esp.GPIO.PIN0), uintptr(p)*4)) } // inFunc returns the FUNCy_IN_SEL_CFG register used for configuring the input diff --git a/src/machine/machine_nrf.go b/src/machine/machine_nrf.go index a7d1eeb08e..2fc4681700 100644 --- a/src/machine/machine_nrf.go +++ b/src/machine/machine_nrf.go @@ -371,7 +371,7 @@ func (f flashBlockDevice) ReadAt(p []byte, off int64) (n int, err error) { return 0, errFlashCannotReadPastEOF } - data := unsafe.Slice((*byte)(unsafe.Pointer(FlashDataStart()+uintptr(off))), len(p)) + data := unsafe.Slice((*byte)(unsafe.Add(FlashDataStart(), off)), len(p)) copy(p, data) return len(p), nil diff --git a/src/machine/machine_stm32_flash.go b/src/machine/machine_stm32_flash.go index 306cd936aa..28bf9a1cc3 100644 --- a/src/machine/machine_stm32_flash.go +++ b/src/machine/machine_stm32_flash.go @@ -25,7 +25,7 @@ func (f flashBlockDevice) ReadAt(p []byte, off int64) (n int, err error) { return 0, errFlashCannotReadPastEOF } - data := unsafe.Slice((*byte)(unsafe.Pointer(FlashDataStart()+uintptr(off))), len(p)) + data := unsafe.Slice((*byte)(unsafe.Add(FlashDataStart(), off)), len(p)) copy(p, data) return len(p), nil diff --git a/src/machine/machine_stm32l0_flash.go b/src/machine/machine_stm32l0_flash.go index 08136c9d4b..7f00c2d6c1 100644 --- a/src/machine/machine_stm32l0_flash.go +++ b/src/machine/machine_stm32l0_flash.go @@ -28,7 +28,7 @@ func (f flashBlockDevice) ReadAt(p []byte, off int64) (n int, err error) { return 0, errFlashCannotReadPastEOF } - data := unsafe.Slice((*byte)(unsafe.Pointer(FlashDataStart()+uintptr(off))), len(p)) + data := unsafe.Slice((*byte)(unsafe.Add(FlashDataStart(), off)), len(p)) copy(p, data) return len(p), nil diff --git a/src/runtime/dynamic_arm64.go b/src/runtime/dynamic_arm64.go index e167f6f2e6..c4385f6dfe 100644 --- a/src/runtime/dynamic_arm64.go +++ b/src/runtime/dynamic_arm64.go @@ -38,7 +38,7 @@ func dynamicLoader(base uintptr, dyn *dyn64) { for dyn.Tag != dtNULL { switch dyn.Tag { case dtRELA: - rela = (*rela64)(unsafe.Pointer(base + uintptr(dyn.Val))) + rela = (*rela64)(unsafe.Add(base, dyn.Val)) case dtRELASZ: relasz = uint64(dyn.Val) / uint64(unsafe.Sizeof(rela64{})) } @@ -62,7 +62,7 @@ func dynamicLoader(base uintptr, dyn *dyn64) { if debugLoader { println("relocating ", uintptr(rela.Addend), " to ", base+uintptr(rela.Addend)) } - ptr := (*uint64)(unsafe.Pointer(base + uintptr(rela.Off))) + ptr := (*uint64)(unsafe.Add(base, rela.Off)) *ptr = uint64(base + uintptr(rela.Addend)) default: if debugLoader { diff --git a/src/runtime/os_darwin.go b/src/runtime/os_darwin.go index 7197c43973..683b1ae08b 100644 --- a/src/runtime/os_darwin.go +++ b/src/runtime/os_darwin.go @@ -85,7 +85,7 @@ func findGlobals(found func(start, end uintptr)) { // pointer to that struct in advance. var offset uintptr var hasOffset bool - cmd := (*segmentLoadCommand)(unsafe.Pointer(uintptr(unsafe.Pointer(&libc_mh_execute_header)) + unsafe.Sizeof(machHeader{}))) + cmd := (*segmentLoadCommand)(unsafe.Add(unsafe.Pointer(&libc_mh_execute_header), unsafe.Sizeof(machHeader{}))) for i := libc_mh_execute_header.ncmds; i != 0; i-- { if cmd.cmd == LC_SEGMENT_64 { if cmd.fileoff == 0 && cmd.nsects != 0 { diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go index 0ae105c5fc..6605f13efe 100644 --- a/src/runtime/os_linux.go +++ b/src/runtime/os_linux.go @@ -100,7 +100,7 @@ func findGlobals(found func(start, end uintptr)) { PF_W = 0x2 // program flag: write access ) - headerPtr := unsafe.Pointer(uintptr(unsafe.Pointer(&ehdr_start)) + ehdr_start.phoff) + headerPtr := unsafe.Add(unsafe.Pointer(&ehdr_start), ehdr_start.phoff) for i := 0; i < int(ehdr_start.phnum); i++ { // Look for a writable segment and scan its contents. // There is a little bit of duplication here, which is unfortunate. But diff --git a/src/runtime/runtime_atsamd21.go b/src/runtime/runtime_atsamd21.go index 43e537708c..953b4d90a0 100644 --- a/src/runtime/runtime_atsamd21.go +++ b/src/runtime/runtime_atsamd21.go @@ -66,7 +66,7 @@ func initClocks() { // #define SYSCTRL_FUSES_OSC32K_CAL(value) ((SYSCTRL_FUSES_OSC32K_CAL_Msk & ((value) << SYSCTRL_FUSES_OSC32K_CAL_Pos))) // u32_t fuse = *(u32_t *)FUSES_OSC32K_CAL_ADDR; // u32_t calib = (fuse & FUSES_OSC32K_CAL_Msk) >> FUSES_OSC32K_CAL_Pos; - fuse := *(*uint32)(unsafe.Pointer(uintptr(0x00806020) + 4)) + fuse := *(*uint32)(unsafe.Add(0x00806020, 4)) calib := (fuse & uint32(0x7f<<6)) >> 6 // SYSCTRL_OSC32K_CALIB(calib) |