From c01f81144e7d7a990cf038e0553352be51749a70 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Fri, 27 Mar 2020 20:27:42 +0100 Subject: [PATCH] machine: avoid binary size regression after LLVM memory intrinsics Somehow moving to LLVM memory intrinsics for calls like memcpy made the machine.sendUSBPacket get inlined. This is a problem because it is called in many different functions and it is just big enough to cause a significant file size increase. Adding //go:noinline solves this problem and gets the examples/blinky1 program below the file size it was before this change (tested: itsybitsy-m0, itsybitsy-m4, circuitplay-bluefruit). --- src/machine/machine_atsamd21.go | 1 + src/machine/machine_atsamd51.go | 1 + src/machine/usb_nrf52840.go | 1 + 3 files changed, 3 insertions(+) diff --git a/src/machine/machine_atsamd21.go b/src/machine/machine_atsamd21.go index 312a00fb..92b7119b 100644 --- a/src/machine/machine_atsamd21.go +++ b/src/machine/machine_atsamd21.go @@ -1736,6 +1736,7 @@ func cdcSetup(setup usbSetup) bool { return false } +//go:noinline func sendUSBPacket(ep uint32, data []byte) { copy(udd_ep_in_cache_buffer[ep][:], data) diff --git a/src/machine/machine_atsamd51.go b/src/machine/machine_atsamd51.go index f758c12e..66246c94 100644 --- a/src/machine/machine_atsamd51.go +++ b/src/machine/machine_atsamd51.go @@ -1907,6 +1907,7 @@ func cdcSetup(setup usbSetup) bool { return false } +//go:noinline func sendUSBPacket(ep uint32, data []byte) { copy(udd_ep_in_cache_buffer[ep][:], data) diff --git a/src/machine/usb_nrf52840.go b/src/machine/usb_nrf52840.go index b40add6b..328a6902 100644 --- a/src/machine/usb_nrf52840.go +++ b/src/machine/usb_nrf52840.go @@ -384,6 +384,7 @@ func cdcSetup(setup usbSetup) bool { return false } +//go:noinline func sendUSBPacket(ep uint32, data []byte) { count := len(data) copy(udd_ep_in_cache_buffer[ep][:], data)