diff --git a/Assembly_Comparison.PNG b/Assembly_Comparison.PNG index de039d9..53d06d1 100644 Binary files a/Assembly_Comparison.PNG and b/Assembly_Comparison.PNG differ diff --git a/Performance.md b/Performance.md index 889e6fb..bb0f43f 100644 --- a/Performance.md +++ b/Performance.md @@ -11,14 +11,14 @@ For a test example, let's use an imaginary Cortex M0 based microcontroller with ``` # Imaginary super simple GPIO Peripheral (GPIO_Base) GPIO Peripheral Base Address: 0xF0A03110 - # 16 bits wide (2 bit per pin) + # 8 bits wide (2 bit per pin) # 00 = Input, 01 = Output, 10 = Reserved, 11 = Reserved # Our LEDS are on PIN1 and PIN3 GPIO Direction Register: GPIO_Base + 0x00 # 8 bits wide (1 bit per pin) # 0 = Do not toggle, 1 = Toggle - GPIO Toggle Register: GPIO_Base + 0x02 + GPIO Toggle Register: GPIO_Base + 0x01 # Imaginary super simple UART peripheral (UART_Base) UART Peripheral Base Address: 0xF0A03120 @@ -43,8 +43,8 @@ This snippet is based on a CMSIS style code, which makes heavy use of preprocess // Structs to map onto memory for each peripheral. #define __IO volatile typedef struct { - __IO uint16_t DIRECTION; // Base + 0x00 - __IO uint8_t TOGGLE; // Base + 0x02 + __IO uint8_t DIRECTION; // Base + 0x00 + __IO uint8_t TOGGLE; // Base + 0x01 } GPIO_TypeDef; typedef struct { __IO uint8_t TXFIFO; // Base + 0x00 @@ -64,21 +64,24 @@ void Demo_CMSIS(){ GPIO->DIRECTION = (GPIO->DIRECTION & ~DIRECTION_PIN_MASK) | (1u << (1 * 2)) | (1u << (3 * 2)); // Enable the UART. - const uint8_t UART_STATUS_ENABLE = 0b0000'0001u; + const uint8_t UART_STATUS_ENABLE = 0x01u; UART->STATUS = UART->STATUS | UART_STATUS_ENABLE; // Loop over forever. while(true){ // Put a string into the FIFO. - // UART->TXFIFO = 'H'; - // UART->TXFIFO = 'i'; + UART->TXFIFO = 'H'; + UART->TXFIFO = 'i'; // Start sending out TX FIFO contents. const uint8_t UART_STATUS_SENDING = 1u << 3; - // UART->STATUS = UART->STATUS | UART_STATUS_ENABLE | UART_STATUS_SENDING; + UART->STATUS = UART->STATUS | UART_STATUS_ENABLE | UART_STATUS_SENDING; // Wait till the UART is done. while ((UART->STATUS & UART_STATUS_SENDING) != 0u) {} + + // Toggle the GPIO. + GPIO->TOGGLE = GPIO->TOGGLE | (1u << 0) | (1u << 3); } } ``` @@ -91,39 +94,32 @@ This is written to mimic the CMSIS example as close as possible. #include "cppreg-all.h" struct GPIO { - static constexpr uintptr_t GPIO_Base = 0xF0A03110; + struct GPIO_Cluster : cppreg::RegisterPack<0xF0A03110, 4u> {}; - struct Direction : cppreg::Register { - using PIN0 = cppreg::Field; - using PIN1 = cppreg::Field; - using PIN2 = cppreg::Field; - using PIN3 = cppreg::Field; - using PIN4 = cppreg::Field; - using PIN5 = cppreg::Field; - using PIN6 = cppreg::Field; - using PIN7 = cppreg::Field; + struct Direction : cppreg::PackedRegister { + using PIN0 = cppreg::Field; + using PIN1 = cppreg::Field; + using PIN2 = cppreg::Field; + using PIN3 = cppreg::Field; }; - struct Toggle : cppreg::Register { - using PIN0 = cppreg::Field; - using PIN1 = cppreg::Field; - using PIN2 = cppreg::Field; - using PIN3 = cppreg::Field; - using PIN4 = cppreg::Field; - using PIN5 = cppreg::Field; - using PIN6 = cppreg::Field; - using PIN7 = cppreg::Field; + struct Toggle : cppreg::PackedRegister { + using PIN0 = cppreg::Field; + using PIN1 = cppreg::Field; + using PIN2 = cppreg::Field; + using PIN3 = cppreg::Field; + using Reserved = cppreg::Field; }; }; struct UART { - static constexpr uintptr_t UART_Base = 0xF0A03120; + struct UART_Cluster : cppreg::RegisterPack<0xF0A03120, 2u> {}; - struct TXFIFO : cppreg::Register { + struct TXFIFO : cppreg::PackedRegister { using DATA = cppreg::Field; }; - struct STATUS : cppreg::Register { + struct STATUS : cppreg::PackedRegister { using Enable = cppreg::Field; using Reserved0 = cppreg::Field; using Sending = cppreg::Field; @@ -146,18 +142,22 @@ void Demo_CPPReg(void){ UART::TXFIFO::DATA::write<'i'>(); // Start sending out TX FIFO contents. - UART::STATUS::merge_write(1) - .with(1).done(); + UART::STATUS::merge_write() + .with().done(); // Wait till the UART is done. while(UART::STATUS::Sending::is_set()) {} + + // Toggle the GPIO. + GPIO::Toggle::merge_write() + .with().done(); } } ``` ## Assembly results -[This](https://godbolt.org/#z:OYLghAFBqd5TKALEBjA9gEwKYFFMCWALugE4A0BIEAViAIzkA2AhgHaioCkATAEK8%2B5AM7oArqVTYQAcgD0csGADUqAA5rS2YMqYEARqRakAngDouABgCCcgFR2r15XeUABAGYEm2ZX//qmtoAtCxMTGZITi7uLGJESGT%2BygByBBiswsoAwqxiAG7YemzKEGyoeYXFbsLYbJgmbNhmGAC2AJTRrm4YaiakBMBIRDnofQNDIzyW9JbB0/QAHMoAynUNTaOkambK1uHKE8NZWrWkhZgWNi5yTnc8AMwE5UxiOMpcD9mowkSEbERPrh7k8Xm9fJ9skQTGpsAB9IhGYjCIEg54VcEfL4eMTlIgEdBsMKomy8UEY96QvStZEk6xOBSqDRaYBwgAi2C8TWEkTRHnqnJyAAUhQAlXAAcTh2RF4qlbNwADEAJIpXArOEACRBOC5vhlYsl0tlRoVKrVGu1NiJrWwwjULCkTKCOi4AHYBNd/GJhM8dNZMJhTsIEVi2cpfpgQCAxM8iGpEQjPp7nN7fRxlAB1AiYBKhz7hyPR2MAxZJh4p5I%2Bv3KADyHg8tSI%2BYehb%2BxbjZcBFei/iI2FaalY/axUJhdRYtuUABU6clfqQxKgRtDYXDWixhABrD4e3vJPwYNi/bAAD00EaILHxqFUhN%2BM%2BU%2BTCYghrcvUZAbDEtoGqDh1K0l8s4PLg0YbqeECdD2Xp%2BO6bLJncboIaSjzrAQHhwaSNiMtYqBSMIwhCugeioOYUSoU8/K6sKhpStY2TZOqKxCrWAAyyrZAAmlqOqcs8%2BomvRjHMaxHHcbx1qTnaDpOoELK7pWfYDkO15vmOsI2r4ACy2nKrWCLkMoq4TlO05GdOygbtuRn1o22DNiM6ANk2c7%2BAuS4jKK2gECepDeSwmCKfuB5Hie56kJe17pHex4jPo6AkcovkIgM%2BQEGEYYhQe/gQNZO4FgWxnjuum5bpCIFgSAz6vNg7QfDwABsvCNaUzn2SMhXvpYYjQUpOX9oOw7qSZWnKAAqmGT7oDmbk5c8xS%2BL80W3pZWiBRA2U5bFD66fpCKuGFIytDS6Bwjg6VSOQW0DeOY1FiAE76D4cIYZCSgpYiBDpWERnjY4oHRiZU3fuECakDd21Qzl9VsOgZ5SAmwWwdDWhEBIJTLTecKoJu3bZJVUB2CdBLndgl0Qk1VllfVqKgco7VNn1kPwYhKPJINqkjpCo3SRNU35DNmBzQeC0CVFN6PutmCbez21Hcoe0GUQh33sdp1kxT11y7dml8w9T0vW9XyfWlGVMH9ANVcDRWg0w4OQ9DTvKLD8OnojnV7jrB5oxjEvpDjeMVUCEDExrF3pHVbOpjlrMwTHu4IfHHMqcNo681OSuGcVetmRZ1M2XWLkOaGjMOSLHnLso3nAL5/akJmAzc17CfJEdZ4XljMUKwlSWm995tZd7yR5WVWXviZpXbsHgPVS%2BdUNc1VMQGXnWtkVPXM97nNpzzd185NRWC7NoGQ2Lmxd7ex9BQA7k32Cy6321ZyrO3q6TEdXY7/iWTVr7a0/XWpklrtkekSZ68JjbZA%2BiGL6P0LYTStkDccIMxBg0RN/Z2ztXYI2wEjd0/VoZhw/uTSOU1L6B1%2BDPXAj8sEj2IWdT%2BlNWoAD98q0zdNkUoEA/7qUhAzYuRBaZU3YZgl20coZx0ISnIaal077ynIfd818RbJHPiAla00czKDvsQB%2BYiX6qzilZcOpCv7Dx/k%2BeeACsEZxAZ%2BQ2kCPCQn7vAy2QJkGwlQegiGFi6HQxwe7PBntpHbQYZrMhR954SO2lIkKcSUY7zkXvXOOk9LKyMnYmc%2Bd8q2UEaXQR%2BdeEV0RJ5auPk/KNz0dkNW7AQmQ3bhFf2t4e6JSYMlWBZtMqFT8aUfK49wyT3ytQ6MvDhFL1aivQRAzlCbxiQNVOySvhZKUeGFRp9vbqOaVo2%2B99aHO0MW/ExJCtZiKyQbcBRtnFfBgalAev1EEeJADbd8dsHa9P8TDZQcNcH4Jblg8JTDyFXmxrjKhwEQ5iPoSTRhZjmHKDYTTXcXCoC8NHPw1e4yC5bk6L0regDE7zIPEk7myyFG%2BFWTs1R/gtmXx2TovZBj0kHSOTCiJ5iCUc3JR%2BaMjjXrXOyK4827jZ4vPDG8jBHzPku2%2BW7D2yNOX%2BEBXCgW0Tk6xOQkShJCdK4jGlnCQkTATAKqhiSka3KX6ZO5eZR8uSi4dQKR1alfhaUgpimtbAG0FaHIVmyphgT5UELEb7UgJQa512wP5T1wsviWuydioyq8nnSzyqYim%2BLJGavVXBLNhDdWHGjXCXRI4QAFsCgatgRqTXbTNfI1JitmVECtfWm1lk7V2SbI61yGyCWus0dfBleiIA%2BrVsc2FpypXSoCKO3%2B88A3BOrU7cNlT76QjjTau1SbZ7Fofn6uFRkxlEuSNq01izSUaWAQ2/aTac6XtbQm%2B1nanKFMfMUntUM%2B2SwHTu4djajEPj3em2Vvz6m9OXfXKp/YalxTqWuxtFkjKbpfW%2B4EvTow/sA5HDNGqk6hL8LWlJl641ZPvcM9921P0xQHU2X917/3v3HVhyGPygl/LwwecDkbIPYGg8tAEcHr0IYfT1RDZVnUHnQ3szDUhsOx1zZDAjZL63EetTksT5H5qVvFnSgdFRPWkFo8rejY72VR29ixwN/znacYbvfXjV5%2BOxvg/Gu1ImEVkdQ4qvwkmh3Sajtmg8J6a1nvNcp5zJG1PTw06LLTF83VXyFsZdAwBgA%2BEMyy31aamPmblQuoNvTlUU2BStSh%2BNCahz87TAArLgbFsnAvyZRkFvw%2Bad0VqrflglimL1jRUy2yLW48kOufU66LajYsaK/Yln9I7jF%2BZsVOz5CtZ21XnWxsRNnuMCYyfGoZ6mCZPN4UZHqTyf1Qv8PN7haLIQYsEVi0Rk7FtPelfV49jWushbrUR8LqnbVlSG0%2BgRHUilqs8x%2Bib2zv17NmwBrLMngOsdA158ptcV3VNqY57I52/DrubfCMjB3Z5HdmWIIyqL57oq%2BEDpmi86vY8W%2BJ5IPn%2ByppOUxgLb3cPxPe6zSi6FMIfGwrYOQM4kREB5BRekjwMICkwgaOUcJpyimsMqaclo%2BJ6logrpXKu1eSWsFpe0jpfDyW0Iu4yn3ITZlzEgUMKwCAAC9sAlMXFXGz05xxEu60CS8ruvIVPrh72EkJFhiB9wQ5Q1YMxip5TGTs5Y%2BCEoC97%2Bm%2Bb3ee6%2BPQRqYf6YR6jzoGPD0SxECzwnpPhCU%2B1bTwHyNQfndfAeDwHPtW8/pgLygoqRe4yN7L9q3nUuHj86wvSHCIvayFFIB4Jg6Ab68kojLmi8ujS1gAGq4FFIqNitZMz67JLqcWS%2BpSr/X5v7f%2BvDeyRN8yM3nWL/G%2BSgCSNRImBZE6zIrmfDvbW7zCMTMC2gFjTp7B5fCZhPLAxHYKbcpAH17ZCgGiooKASAhNbRb5qoBIDYCoBbgGoT5T4z7m5Vht4FrCBoJrwoRdbcoPRxjaBGBMA4wY74y9wILXZfBFSIFgEZ6EJ96aqkjcED5D6C4j7C6KxlRz4D4L6CiH5wjaTWArAADSu%2Bjw%2B%2Bmwkh0hch5%2B0kRuck1%2BroVm%2BGluSmRGZU5YYO06cUHckU2kRhx0LAW4%2BOZUEACs3%2BtuIwN8OYCQa2SOUMIaJQrhNuMylgWIio2OJ2j2TsIA2OFCYK%2BMlh24xh%2ByU6o8thU85UsaVhIcThCIEAvhCQygwQyg9A7QtMLBVOBRyK%2BR2O9WzWFusi56WSMRWB3YJhh4as5hwhsR1hSRwgSAGE/YmAyRDho6GRLhbhSA/%2Bz20qCsHaJcI2NOFmeWuhPsDkfskRQcqR7RIcG4SRBO9RcR2RSARRWOVOmKWqPOvBZI/Bdwo%2BqwSAgUM%2BK%2B88ohZI4hcuQkcIKwmo1gbI2%2BK%2B1gbE40uAChDwShgkdEbxHxXxmYPxfxAJVoBuGhl%2BzoCkb%2BykNRoWl6NmRkjBE0tQKwNxmAM%2BLuZSuJtxN8%2BBph4Unc8WRyWJPo8IXRJJU0HgYQtQJxXOiS%2BhPWfMNmhJVcxJ%2BJN8kIGJxki49eLeCx84VJWSNmnivgb67GjSlJmirSSUtJcI9J/JU0pS9enB727%2Bu8BhgBNeEM0WUpRpMp1xJJgpRpmSIph2FOPSBK0pIApw5cyeHJppqO9cIsCpkUyp7SfJBJXwQpWpTyqp6pgZKY/e5x9QGEw%2BDIIu2kkawA2A3Gjx0u1EEhrx2k6%2BEouAmYooquMJGuB%2BWZOZeZBZ04RZUktomhV%2BLo5u3u28UB1pkB9aTpwMuSkMUxjk1ODkYxXKbZZpzyKCxSyBtWFQm4WQiZpAyZ3GCIQ05uagYgz06Q4R3s%2Beyg%2Bgm48IMeHpEapAMpRKmg30aka5BKFCk5kaRAEASgTp4ZN8xYtQapeJM%2B/ZU6vAPAv4yZg6I4vksqIwLAz43gLAECygHgSQ95VitUBanpkaH5r25J/YTSdKPc25CIKCcIjoqAP4aCakfRzBZBWC5O0FN2Rxd2tOoiHOiFrRKFo6W5T5wMdBrQ%2BgAkfR/SRUZG7G05s59885Q4UEwUup/gS5K5qAZ54Oi02y3FKZvFRAC5mxD8HhikBa6MoagluG5ekM0lc5cl/F3qSZMleifFTALURR4YOAPg/YR6/g2lslQ0LUDMsIRgJAxpbIAxxitlRlulJlTUZlygFlDk2pWlBlOl9lVMYwka14ZABYw6IVdlQ4LUplU0AVVlVFOOcVXlC5EVzl0VrYsVM5hl/YxlflKVQV3snlRV3l%2BVPFmVCVTUSVRUpV1lLqEOA6%2BJTQAlCsiVVMcx62vSe5fk0YMODGpmQ8yOyQTppAN864A4cIagM0j%2BBmCFOUm2dm9BN2j2A19cQ18G9OW1kaMpb5TsTFLFTQbF/29OIm9OmF%2BEOFw0%2BF0SoR0qp2UmcO/m7GVRepSyWO/V3KioR1B49FO5KCTQ01EBv1LaU0FVO59lLBj2GJ9OEAJ1rFyRZRio4ENMANUMV1j2SNWFd1eFcI12VMLC6NIA7CZRUAoNRN9pxRXCZNmKi89O4x/iZND241LNgWY2/g4m6irZl6FyIFVyG1yOEAVBoazJ0YaBGBWB6AOB0%2BApcNHNfgd5ju2ARk1NxOEAbNY8dMtWDNd2zN4xyadoJBoyc6WNP8RtdC7Bwe9V9V3srhCQnVo63VrUvVnhzs3hserQctD804GNthUEy1mlTWQlehqJ6KTZg5sFFA/Nhpsd5pwyY5IUE5hEisGVzchCIlpE4l20G5QN6FXiRU%2B1B5w5wB2daUp5DSLRyFVJqFDFGFbQp12A5124U0nFIUOdq5NdZhddmi0N1MQdDdwNXiYyCOlm7GyQ3t0NPCc6zVodBKs90NbtVkN8HhkMpaN12FrQuFvRNNtUeUs%2B29BN%2B949Qa4dB4s9%2BlBVW2vlyVRQgVC9K94VTlUVrl7lu0mdzu99jVj9qVXF39Dl2V79MVL9EyJV/9ZVvarViW7VilRyq9HtZJABXJQ5w1JmQKDp0qk101torQc1C19cUEC9E1RpW2St0qpdO1gm9OhdJkltOUyNZ1yRjDB4IRytTsL1vmb1RkJ9u991B9r4Idn1KJH%2BX2Y0QR3NLVklK9QZ1pygzDrdqN7o9NGNUWtWTtkuRFI9Rdspc6TNPVuWfVyOF5hEV5EAlBIYwg0kItnNNaf10YDoWgAIcILI%2B5bDi23JT1z2dptUnjNtPAPAXgRQQUf5cMIwHgpA6ArQxk6BEYfM7jfkD%2BVkBlRaq6QTIdyQZN81pEJgQMn2O6djny9D44ATfgpTsI5TygOtNk9OBtTqPjDOoEm0TU/De9yjxOh6aVixqlbA9OD0vthQ8RU6cj2QQpSNzdKN7FnCNT6jOKjOzsgdD87Tgjh6TTB4Ijl9x5z4/YedOUZjZw15t5Q595j5dJL5N81TscQTX5vgO6HS/5yggFLAwFoF4FkUkFaKSTXpmTC9PpGdt9ey9UW9%2BNAjhNvCEAm86l/ztdF419dFaF4BILijYLHTD1h9%2BQHCAgl9yQlTvgqzELaqOpbJ9IZxaEMZAulxQhNmaZVEsuWuRocoyoKwlZoogJwJjLUozLrL6%2B6hNZCJpuOhFeHJkMAYQYdosCKO4rwYANQxKOThANpddeVpwAThttvg3kTY9xJF3Up4lgANWJ40OJlzjJzJzuKdKM1esdKDkehBu5zZsdKr8jarIxGrC9G5L8AsJE0UPgt6sLfdipksCsMrkroYhdgUEr6dRUNcobhEAbFJnz9dgxIxoYvoTuU0Nc6rPTALtFxiwMLppB5S2rxLkMG5kFRUAZit4zCjxr2AVbdM7GdKhyU1M1BD814tAlyJTs3tWg4tQQzYUR22GWasIcEbgYwYWzpLUMebu0f6hwZ0%2BDhDnb2LwaSxalfbi1A7pWkI3q87R0Y7aFkbk7C9ojEd4jhGkjvNEOzbQDBpfMOTxgdQzYPzkaRktTKRTRB4dz6TQ6CsWSZN4BBjyD3bqM67/Tj2YzAHTjT7rjr7FAcz5N6mX7WCyzUAc9urhxajIAjNDlH7hRp7uLYj%2BpP1yOAHbDQH/jZy1qUN39xlxT/i0HIAzjz7bjLZj2H71TDTTY1To5nD9j4m17kll88d%2BsoCfKUCYi4tz%2BwgUt6BmB2BkauB1bAzatB61ipQH7WIwI9M3HDkuK/Hvjs8pwZtc8VHvSs4GzXD8BdtEykMP7P6SloHXh4HPtftEAAdSHQdBHPTZ7zSmF5jpA15WbIxygSgG8pO1tPNQTShNYLAKO%2B5t6AiOioXPUjzETzz4QM%2Brd8FrJ0cUZFLhAVLQujIioBAoTdLzxXLcIPLbLKouAbEbIHL/EyhrxtXJ%2ByoDXTXsJd%2BWh9ZoHjZ5B9afA25CNX%2BqbIwZXoTirXZ%2BSk35XTAmA3ZSr3KeEBEREJE6QJg8SKBpSVcU3i3trG5LHcHRpU0I3tQ3JPTG5Dr9aJ3L7Q5JkHrhBXrJd3K93bHidIAL8z3NYuTW3U0a3krxEeTCbSFQb3cKbNuoYexU0B3mA2b8pcLSbSpo63ZXaDkcPC3S3giYPNFyb%2BbKC7F74Clz5PRyjBOT3LTex1z9jdPvZQieP/dwbdFbSygNx1jpr2DzsH38H0YZzMYT595C93WlHr44mqB8nst8teBzn8syP2yfpRBJBY10q0nktaAUvink%2BCtDHU6vPpzanUX4Nhnfgo87detDPBn9PnyJtxBTARA5ttUhH07FGN7kpKCKaTn4p203t/3ZEBTkd0sw7N6DDD6W6NC9OBvX30Tbby7i1JDVnNvT2U7Iv7pNHb3wBKHNK7v/aQskMP6/7FB4nlyTi70YAHPz5JJFkGrUFwjzGxjntTs/v%2BTzyhTq6Tmgmt6omhcEfIzWC0f%2B50YrbS7HbCf7QvHj1pvyfnyqfPTovGfE8Ge2fMj2mVJKijteyRf9agtEC/KkIlf95NfNn%2Bjq2DfIGtrZDsdFDF6eOPfg2DPiz3mIAZ2TUg/g1IAAvXT89PTyQLfgf4jIpp3x2xh89sUWC9H43/gk5IUj2d/ttWdJ4NZqY/YhhPyj6wcHuX3L/lPxn44Cp0c/djAvzHoacSM3rE%2BCvwfzCd4sonKcLv2FqUNnYSgQ/pczERu0xE0tBTn7R16BlsgKGYfqbQd5sNLO0/Z2O6035DpveU9YSptwD5t9I6QA7IH1nVrh9kMoOfvjz3QGfch%2BCAuPsgMjSJ9hBuAvAS7zT6R1CMdfJQSQKPj59pGFAtfitGoH2JeUpfffvQKdhMDLSvSVgb0nYHS8lOuvL4LwOdL8Cm0YiIQbgNEEEpHOE9eYpIL8A/pumH1Ijqvzix59tENGCQWIn/6yCP8YibtAoJ%2BxVNsUIcOAQdW0Gj8iGegnzokNd6aZKBqQoKHpmMACUQOPvHKFkLNRsCfAxgEPnfyKEtMShZdEfkgIqFLV8BZ8XPlNm0QkAUsaWDIb0naEhYzkyWVLDAUUH39ihGgvnmUOGErsxhmyCYTFCxIpR0h0Qkxlgm9ra1sefAjaGZSKjm8Cop8emJij2EwM6hksI4SGEaFLVThTfMDn0005XCghNw/wr1GME9NDmFjAYfzzVracioNPKLnBCCYhNDusPP8qwAKqRQEg7AZQPdxgqJd02P9HgCHQhFBcIAUIz/jCLpjhhYeggBnrT2PRBNV4DURPKiKyDojkymIm4iUFxHwcIwatXLuCPiwBcjmlw6bqF3C7dRIuVnD8rFwzDxd4eSXZyClz8Jpdwm6AACllxvg5c/mAWLgmQWjJFc4yNgfNBKCFD6Rzcs7cHpFGLzgxQwpo/aBdzfDhhLAp4RUDYEsAPB6AswfLlaz24jA2QBALQMuAJAlBS0QraMFd2yD2iDIjo5kbMn1YGt8i2ecPK0LtY1gzRKQAIkVHDEgB4ekIAMUGPxCEgjITeY7DEB4BGQcx%2BqIATp3YwbkMx9AKaDmLzFfACxGBIsWwBLGk58i5YysdoWuF9Eaxv3DMBmJ4BNj%2BxuY7HvmMDHtiQxXYksb2MRLaABxv7VKrWLLaEEMxDwccS6GjAtjsgbY4McWOUCljlA241wBWKXGgAgRg4jvuuPXKbjVQAAFh3Esg9xU41sTOKPGdiTx3Yl8ReL7G7ibxq40UsOJ0AZiqsr45cZONCbTjCxc438UZEgkASrxK4ocdd0fEpBWo2YicfuMPEdj5xygVqChKrGFp0JdYzCW6CgnXi8JX4giYhOUBUSSJE46sXeLy7xwQo%2BaacMsL9ZhiJxkY6MXCFjG0iXRlgS8aHhTEUT0xqoLMe%2BGbEfiDxdEhCfQG7GJjSJ5aQ1Nt0eFSSRxqoRsThKAm0T4Jx4lSUZEYCoTgJmkxthuOkkpAxxBkt8TBMW5wTZxJk7sZePUl9ErJ2kmybpJSDbiHJ0Eoya5J/GmSzxgExyfqm8n3iCU9Y58dRPfGwTPxxk0Kd2IeARToJUUytFpJilQw4pKQSCYFJokKT8JyktKRlOvFZSjU1kh8bZOwlyTcJJUpSW5KMjpSLJVUnKWBOUAZiqJRUxKc5OSkhSzJ5U9qYWminsTIyPOY0X6ImjWBRQlkUDpaNaI2jEwIwcaHNOnBCTtyU0F0W6OsAej6A0wH0TqhmnTgAAGiqEVC1hlAfEoCZGPWnzStptQOMaJMTESTc8qYjcmyGsDThnAfUpyTGgJgXTlQV0oyKHjLHMSgJbWcabqKmknS/cqwX6dOHGgrAbpFk%2B6RtKemUxE8ok8ye9LFI6SdAuAUvglIBmQhWWP0lGcNOOwVS0JbEjCTWC1aRoLgsk8MPJKSnZAKZyMlYIRPMmeT2snUhmRmDWAxkMw/0/cVzKpn5ERp/M8ib5J0BMzzgrdfSQ1MMkKTJZPM5QE%2BL/G0zgJcssOqSz7w2AB0HIX2saDFDaAeEQsToAsUZCWFbCcTXwGoGeBZB9AvgbEeIHjDxArgCcaMdGFKmEhwIaTeQX7JAABy2A0YBsSHAKJmAtGkIUOeHMjmqgHg0c9oGYHgYkMOJKMRkMTKFq%2BAEgFKDaT7OSAPTPOGs6MLnIgT88HImcyMtnJFxsREoagBmBPjApkByYkaYuf4BvjdE0sWpG2exkZBCh4gzzX3DWDjDoBHZNTEGbWC7k5RS50Yc6ZdNrD%2Byfp1gZnDATAAyBNQW8kOCHQXkgAl5M81eb9I3nvQZABAXeS03xSQxGQKwK8EFwjDoQMwnsmcGdOnlXTYo/YAEDyFvki5pYDMbKWBWx5ZAn2qgLoVoEwBGRRAo8vgJxAfy6oQxf8x5pG1bpGR0C5QfOd0SyD4k7QAIamEQDQJtRNgLsv0SGJQWBhW6acyGAfPLnk1g5HfbILQqRkoyK5pfVObHOIBRAvgzCymSsGjAiz/gwADhRnJvnexGQmYV5iuG8DtIC5s0%2BaY83gZzyDwPc7wA/F4XcyBFz868ccJrmFEYWBspCGQRkAT8mAsgKrDIHIARyZAlgSxegFkBY5%2BAtI0QBICdBkh6Alix3jYpMUT8twIAKrJYDMBPi3QiwN0G6EagLBPRAATiqyxLmAsgJ8ZYtaD%2BKDW1i2xeQHsUyBLFsnA1l4tsUT84AsAFABgBwD4BiAZASgNQDoAVjWAHANAIIEEAiBxAkgaQDICeJghKQXwSMHGF5A9p4yqwP0VkBIDUxm5hIYZfgzIDGoPmygT1EQqcoEA1A6BGgj7L3wtcCWcIc0YLGHBqKnAJkGiPmlA5wgNl104vKXn9HKhxQBMfSCkGTDKBGQwk/gPGMsCWAQoRy80cXi7AzhawEoCUGxFrHJB7l20kSfqx4BGLlAgkuvByGuQpg9lgoA5QsTeUnL48IwI%2BVdNuV3KRcDynGQmNeXHLI8yKxGXwvRWArnpwKmYGCtLmK5xwUK46XbIHCTLnmE7SVm3M5H3MllTs7AAsqWXMk%2BRRAFZYoTWXdT18yoIUJqCEkyFasUAYvD3iES7T3Rno2YAZ1WWa5ox1gcVSsElVChhVoq9VS3keWvTnlSqgVSqrNHXSoAEK6lYKDsD1RVVuqo1UCUFWUrYxEALVQWR1V8AJVL0hMYquLKbBS53CSlZCqtX1QnV25JVcbMSymyzoCglYCyxIa2yEyNhXwJpO6l6Tnm9QVNf5KSwMx4gS5YYjkXyh%2BhlFCsU5Y1FDBsgLluAK5bWBSBwgMxUhGQrISmhQt9AXosQJThRSNiLx%2Bi1RqUEsCtqVJHa0oOeJPFVDso0Y4IECArWXLpw1y5tROqnWVrq1KQWnCwmnVVrZ1NautaqAbVyEOEna9taRU7Xlie1szCAIOqPXDqT1YihODnJJlyLS5xa0dB8tDCUqNZcIXACkGsB8A/lO0/QM8ueVbyANKkolKXMnWgQNZU0MDUCEg29q31LCjUJ%2Bu/V/LjpAKhuU3JbmRoWVHc0gMotUV9yRSA85BcPIApjyMwE8qecvOUUlyNp4G3AKiuulFQt5O8tpT02g2gQGNU0LeZfNY11yCUd8h%2BSMFqCiydAr886R/OulHhv54uajYhXxWlhX1mM99RqpSAVqUgEoKaBerppniF67G9UAhqg20aYNBmuDUpoQ0fqv1P6sUlwng18K3in6tTRKFQ3bQJFUi4yDIqnn%2Bq/ySigvr3N8BQA9NsGqmLZu5n2bVNqoCUPVAlHOjeoBihOFGV4ImL4lMgCxVYtkDpLMljigQI8pcUtKGojeTxelp8XkB0CgUA6lBGS2JLyAySgJWlu8UZLZA2SkALkqK2FFyAfip8U%2BLMAPBLAboSwFVkWA8B6AboJ8fQAeBugalsgB4JYrSV2LGt5APJUlsKUIB4AEAYpTE2dk%2BAKAVAAYoODUUHljArQN0LMHIBeAHekaWThAH0BFbyAp1YwPkxkAeLyAbQW0ACFrDZSbtOADcBwB8CfalJhQWTvVrPAYF4grSp7VQTMX1avoyS7xaYvYCcAGl/AZgAYFk6QAJ%2BYwDsYDuCC1gsgwQVoAkB/D6BslzSqQAwFMXmKZtN2zJXNO0jKBgA%2BERiWYB4BmBGxZQQkAvAgBlKXK%2BW8yTUj21baed9ULLYIEK2w6J%2BpWnAAeQq0daolZgKrENqCbjaoliwRqIsEsBPiqslWpJSkrq0Zb5tOShba1vIDLa1taADbftsqW7bNtB1Q7cdoNZnb64l267fVru2mBZAT2l7c%2B3e1GpPtA4eHb9vq2EB4JAOm7cDuwp7NHtliiHTduh1G7alCOpxUjr0D6BUdFWjHSGKx047ci%2BOpAITuJ2uLpARI5Laltm0NaZANOunQzrdBM6WdpQOGE0Hqic7CA3OskJeL53W7IoreoXYjr4Ci78l4u6NOVvJ0yAqtNW1JVTv13NbDdYu9rSAB4DV7GoT4sSc8rdAPBGoVWJ8TwEG1uhkt023XXNqyXT78lxuxAKbqK4eBLdTAJALJ0YCkBr9c%2B4fSXon0yAAxDYPYKKFp307bw1e5nazvr0Lx8gWQCvV/sZ2/6697O9oH3uK1%2BKt9ZgfrfPtG3q7Go6uh4MEsm0j7Kd9WzJU1pa0z7IdPATA3rsP2La2tE%2BX0IHKfFAA%3D%3D%3D) is how GodBolt compares the CMSIS and CPPReg versions. Looking at the assembly, it's pretty darn close! +[This](https://godbolt.org/#z:OYLghAFBqd5TKALEBjA9gEwKYFFMCWALugE4A0BIEAViAIzkA2AhgHaioCkATAEK8%2B5AM7oArqVTYQAcgD0csGADUqAA5rS2YMqYEARqRakAngDouABgCCcgFR2r15XeUABAGYEm2ZX//qmtoAtCxMTGZITi7uLGJESGT%2BygByBBiswsoAwqxiAG7YemzKEGyoeYXFbsLYbJgmbNhmGAC2AJTRrm4YaiakBMBIRDnofQNDIzyW9JbB0/QAHMoAynUNTaOkambK1uHKE8NZWrWkhZgWNi5yTnc8AMwE5UxiOMpcD9mowkSEbERPrh7k8Xm9fJ9skQTGpsAB9IhGYjCIEg54VcEfL4eMTlIgEdBsMKomy8UEY96QvStZEk6xk9GvSlfIhiNQ%2BOlOBSqDRaYBwgAi2C8TWEkTRHnqwpyAAUZQAlXAAcTh2TlipVAtwADEAJIpXArOEACRBOBFvjVCuVqvVNq1eoNRtNNiJrWwwjULCkPKCOi4AHYBNd/GJhM8dNZMJhTsIEViBcpfpgQCAxM8iGpEQjPsHnKHwxxlAB1AiYBLxz6J5Op9MAxY5h555JhiPKADyHg8tSIlYe1b%2BtYzDcBTei/iI2Fa7JYk6xUJhdRY7uUABU6clfqQxKgRtDYXDWixhABrD5B8fJPwYNi/bAAD00SaIs/SqkJvzXynyYTEEP7z4piAbBiO6AyoHC1K0l864PLgqZHveECdGOIZ%2BIGAq5ncAaYaSjzrAQHjoaSNjctYqBSMIwgyugeioOYUR4U8krmrK1oqtY2TZIaKwyu2AAyurZAAmiaZrCs8lp2hxXE8XxgkiWJrrLh6Xo%2BoEfLns2E5TjOc6QvuS4rgAssZurtgi5DKIZbq%2BKuVmrsoR6nlZnbdtgvYjOgXY9hu/hbjuIzytoBB3qQwUsJgWmXleN53o%2BpDPq%2BqDvreIz6OgtHKKFCIDPkBBhAmMVXv4EDOWeVZVtZi6HseJ6QrB8EgD%2BrzYO0Hw8AAbLwnWlN57kjJVAGWGIKHaSVk7Tqw%2BksoutnKAAqgm37oGWfklc8xS%2BL8yVflokUQMVJWpZ%2BpnmTmXVOTS6Bwjg%2BVSOQR0TXNKmAamS76D4cKEZCSg5YiBD5WEVkLY4cGpoZy0geEWakE9x0IyV7VsOgD5SFm0VoYjWisqQJQ7fiEGoMeo7ZI1UCtNdt3YPdEKXeV7WonByj9T2Y3wxhWFY8kk16f%2BC6wvNS1Vfkq2YOtV6bZJSWE3t2AHfDyRxSMZ0WYC9NU3d6TYI93PHTZr01iAH1fT9Xz/XlBVMCDYNNZDVXQ0wsOK4jrvI6j97o4NF56yVOMSPjL6E3CxO/A1QJlZrNPa%2BzvvnphqH5uhOFc0n1m6dN/MGyZZlq1Z2d2Q5Tl1a5PkefGrMeRLAW7sowXAKFk6kMWAz6T7adKx%2Bk4JTLb7K8oGVZRbgNW0VcfJGVdVFQBhm1ae4fg81v5tR13WXRAleDf2VUjbHHc6VNs5Zy9K7CwBotrXB8NS5sBNvhfUUAO6t9gh3j/4qsXb1lMEtTtO6/vEqjkWp/gAa7PwBc3rGyJJ9eEZtsh/TjADIG1tFq2whouKGYgYaIhduA8B7s0bYAxoGcaiMf43S1j6Kqd8iYkwXrgN%2BgDEaR1/lQumvUAB%2BDNzzZFKBAEB/NIQszLkQRm9M6qdHfn4PeCNOaJwRrzTO85IFn0TA/CWyQb7bSDvfMWyhn7EFfng5Qn91bfyjv/ExwDl5gPAZAo2Js4EeEhMPFBNsgQYNhFgnBcNpH4MRoQz2xDvZkIRhQv%2B2tlqCNTnIlOCj/DyLIUoo%2BKiT6%2BDMfndJa4i7lVLgNCuoii4xKvljGuQUQphRbkY7IXd2ChPhsrB8T5aEnXSplJg2UkGW0KpVfxk9TzT0TLPcqDDUyCPEWvXqG9RFDOULvWJ%2BsM6pIMtktRK1L7Ajjto3uKUH4GJfkw/BZiepXTYdHB6JiHGDmgSwWB30XFfEQblEewM0GeJAPbACjtnb%2BICcdIJXtMbMOSBE9hy1aEh3oTBCOJiJ5gouRw5Q3DJG8P4YI%2BcwjN6TOLqeKRIL/CyOOkk%2BGKSZoCyMr4dZGjSnMJ2a0/ZhjJxHPAScjW5yrH%2BOuUBJxDzXHdNeag0GHyvmJh%2Bbgv5/yZHKBRkQkh7d8EItptE5eiySokqxhqtO5TDjy0wHCQkTATDAsUcs8lkDMnVUFq9eyX48kdlEYUgamj/D0t0SlRy%2B1MAQH7myixHKY4yo9kC0hJj/Z4zrpUpuEVxZfEtba%2B1m8PletYZQxFRL1XxLIVqzciJAq6sinCJlvgQAFv1Ya41oa45kuPtanO50iBZLrYXO1JcHUFK8qIl1fg3W7UZYcv1Zy02coJVKhG/cbGtUBSEk14D66N2wM3F%2BkJ41WUTV2xexbU2RIet%2BZeGarw5qWYfc12TLWQNtY5e1bkexOp7MU1VtKEa9tlv2oxEBB1KsDbK4J8qwnHXnVUl%2BtS0r1JXbnSyOTcUnispvKyJStmjuUKmLdX6pAHuSEeiaZra2UtMRBxtVq8OXug927KbAtq7I2VFHsH6COnLQ21eGP6Q0KrnVGxd1TJwgZ2gCcDDaHJrrbSNIT88n3gJQ4cxjGHElZtJThtJzb8MCaI/NEjozxMbQo9LBl%2BiKjy1IHRhtDHLEx2Y8GmdVakOAablx7APGXx8bjQRwT0GrIieRRpxD%2BDJPvuk2qw9cnq0KdWUp892T1N1TIy%2BvRZZrLoGAMAHwRm1YmYDeh8zcqGn%2BMYxC91UKw4wrghTUz6GPgAFZcDQZk8nBO2agvarzbXYtBqKOVrY9hk9uH5rhaU5Fly7bb2dudZpyW2nb7uuowc99n7Ss6zhWOzuaUvwTKDVl2drsbOceXc5lTtqRlRaK01QR7mxAfK3QtvwjGrJQAxZCLFoicUM0u4t17r2avxwCzzELs0wsudUza3Jbab3l2G/elbj7vPHRi3s/RW7ZvpZXixyzHXEZbaXTUupTnsgvdXURue9UjvjNsfMsQN2BHL0xV8ERA0nuSJe4tsjyRfPMv8wkzNdWYpas5kxAiREPgkVsHINcSIiBikYvSR4hEpREStBqOEq55TWF1KuZ04kLRsXl4r5XqulLWFsp6b0vgNLaA2%2BnLr85SzliQPGFYBAABe2Bq5NYqQ3MKq5FwBZrVTqrOr0ce9hJCRYZ3makOUK2IsoqoF1iICOXMn32fm75j75825a7%2B8918egnUQ9VbDxHnQUejYx%2Bz42PgCfkk/Zx8zP3HHSAB6d18B4PBc9aXD4WQvmCaE3Jj83svFfsK4Ulw8PnxF6SkWF%2B2QopAPBMHQI/cUTFpesTlzadsAA1XA8ptT8XbMWPXZJzTS1XyqDfW%2Bd9771wbtSxveSm6s9fo35Gm5EiYFkKz32Lf3bjlbisIxix2LPRKYZ6B5fDFgiqYInakrZIgGN7ZDgGLyQxQSAiaqjY6qoBIDYCoAngGrT6z7z5m4tgd66rCDYJbxD6KLZJGwZjaBGBMAhxY6kyDyoJ3ZfBVTIEQGgH1ac6kgpy8FD5kij4C7j5C6mJ1SL7D7L7Sgn5wjGTWArAADSB%2BjwR%2BmwMhchihV%2BKkhu6kd%2B/oqO3uoWeGxkdUjYUO14XczSiUJhp48YR4J48I5UPqXcJYZYf%2BBibhSA06f68M4aJQj8nhcylgWI2ol2I0DOiMIAl2kKocpMNhOBo4jCERpQ9hjhh22Q8RZhEAv%2BNuRAEAAR1uygwQyg9A7QjMbB1OpRaK9Al2B6WGSeyiRhPWphiRMUTSPcmRIwqRcIwgSAhEk4%2BqTh/cOR8YBRCQgBb2i2/cIOnkNObMa2v62WzCfhuyBWcRLREc3RGmGRGxxWYxXhVOfC2KAW3OfBw%2BQhdwE%2BqwSAkU8%2B6%2By8EhDILE0h0kcIKwxo1gAoe%2B6%2B1g/EC0uAyhDwqhUk7EbxHxXxxYPxfxAJLo%2Bu2hN%2BvomkH%2BB8yeTRr06OVkzBi0tQKwNxmA8%2BQIqe%2BauJtxj8yGUCHgYQtQCIXeF4DWn%2BqJv2eG6OzuaeIwJJ%2BJj8kIGJ1k24jeVWpaRsea8I9sqOuau0kC6OXi20eJ8%2BcIJS3BXuVekpdeEsKpbuTc0p1xpJ3Jde%2BcfJHyvRpJ8plOfSzCUpIApwVcicPO5x9QhEY%2BXIwuxki6wA2AdmjxUuzxsurxxkW%2BSouAxY8oKuMJ6ux%2Bvp/pgZwZq4oZyk7oOht%2BfoZuhhbB1aMBep0BwBdeWpeS8MMxd6HkExPM6ZGpi6WpMSqBVWFQx4WQLppAbpdmCIU0ZuagYgn06QURccBeA8x4IpXeM8JZC6pA0pAWmggMR8nZzCkKNZi6eRSgFpRpnJxOrURZjOPAPAYEbp02c4oUQaIwLAP43gdyPgygHgSQi5BBGKfIQ5vAPAH27RLSk2/c%2BgvZNJ3icI3oqAoE2CR8%2BqrBFB4Ct2ppFRRxj2q81WX2AQlhPcrSz5r5kMDBrQ%2BgkkgxU8VUGm/6fgdZDZL8TZ7IyE0U9J/grZ7ZqAk5z642Oiu02F7puFRAzZqRBFyOf6uquMJQoaWaA%2BccNFjZ9F%2BFvqrptFRieFTAPU5RiYOAPgk4kFWFglvFU0pyYwi6s4ZAVYzhy2PFdFClXU4lygklHkjemFpiclWl7IilsIRgJAcM/YH6JlwlfFolXUYly0%2Bl0lieyQml9lzZSlllqlNlnlk4Ilulrlhl8MAVIpU0tl9ZQlgVDlPUzlVUIVMl5GlG%2By%2BJTQBF/c8Vl0zFSx%2BC6pQ5qYCOw6USZpY6FppAj8h4U4cIagq0AIi6yEyVyQ6OdmDmYGqZSGxZWZpZw5IAmSL2BVYU0pq5rsiFyFTQqFLkL2ImL2H5FE35mcf5qqkqb252Umc2H29RDJjRnV%2BV2S2oo1V4L51JkMTQVVUBXKEWy04VIl3%2BXV/gGJL2EA41KFBOaK2oCEkiR1CMs1q1pQ81X5rQP5AxJprU4FnCn1IAPCgYfCUA51YNf4hxygUN2Kq8yRkx%2BCUNz2/1mNiSo2mGBNrqlFmZeGjiMCpsjyOO/SNBeMVJqYGBWBOB6AeBc%2BXJe1UqC5DuOsMq2AF1JOEA2NaFV8zMqNj2GNr2yaHoZBy5f47QP1/g64uN/ynBTuTlTlccARCQmVLh2VvUuVhBx0KxRsrQLNr8q4X1DhyEW1RFtWSpX%2BHNQBzJGZaZPVhVnymCoylZbRmQtZdlbcZCJFdE5Fx03ZJ1fZ3iVUQ1mpHtXBMUY5P4k4IdJUD5iUsFLh4db5vgr1k1716Fh2gdbZwdjS0Fj51F/tvgjFcFp1kB%2B6CxrGRlyQKx4VFOU6yV21H8FdUVOFRietTkj83hKBzCpagNi1v5iNr8rQC%2Bo9wNS1E9jMdJPBzCLdAl0VdmCVAESV7lnda9y6l0PlKl1lAo6lp0FdG9ElRQBlyV4V5lylVlalN96tnUwVl9blRlOyaVhIr87UWVT99dKOjdE4g5w1/V9G7KJV1C28/1FVVV7orQtV9VTcTV29JUrVO21ND1ECwDMdA1/1mdhkCtJUOd2AU1MGM1Z2ytxKm6G1iOVkM9INJD897dttV4KZFK80oRRNPalFxlu9vdXwPJxDpDH1X1YmVWWtEu%2BCJ96U8FtdU66NOVFmPh/i05VEs5EA1BcYwgKk91eNlBSmUNXoWgAIcI15YUhDb2LJlDa1i8l1mD4Ct5XgRQUUu5KMIwHgpA6ArQ1kmBSYr0ZjTc5GTkglRae9d5zV/ghjtE6QJgEMCmxaujUq%2BDi4FjyQyTsIqTkTojZD/1Ytzq1jjOxW9Dc9J2e6bdKDV4fhL2JtZtLKr2N9AjepANbQE1jD5UIj0N9OXDASltr8xT49EyEtyQNtS9yQCdE58MqjZwc5YAC5spj8st82BTHUG5gl25vgrj6A%2B5h5rAsCp5558zZTSNATi6t595pd1hXd7UI9n5Y9oNgiEAu8hFozx0qdvDPdzK1dEdvg%2BQ1zyg/T9zy8AiC9AgLDaTsj75tzs9Azj6ipNpZxgh9p/Olxoh6OnpzEMumuNoGouoKwMZ8ogJwJWLKoOLeLW%2BWh8ZCJJu%2BhleDtGDCMUYMYHoSCkawAjLsYR1IxruORR10di6DeupwAORqtkaPY9x4NO894lgR1WJC0OJhzVUlJb%2BTu3tZSLurLQ5htfg3ZUefL9eme2Q9cwriBmeRl3ZZi0StEr4J5hkyVbz6dy27LzL8YmdkUTLVEy09cTrVEdrFzVGwxnh8Y4Yjunr2gxrRl9rT5LhkMVp5BorHk4rf4yV3ZF5ZJVUHJBJjTvVIM8rOpItRlrSg6lV1V8DdVtNBFyJrsKxdgEAWgtNQQvYsR/GasrgysEcrr0YsYZRzDLzJUDrp0YDvUnjJbCD5bILYaHkAcLgtb2A9bOMaxkIvqBGrbXc7br5brXbIzyVbDkCnD5hY2lGhbZ9TJHDqYRjdQvYJzFAKN2TZGm58IW6/cu75ZddBtlb2Mk7eMuOx77Dr0hjxgF7pjTTQtYjL2vTUArdSN921OeT8xpyIHJ43bFTHdECVeVyB1FjkMdj%2B1fWN1Fdd1jtASz7IA57JjV7mTfgCHFHN7IAcGL2FZ9jejWI%2B7hNLHxNh77qpN805Nx5ziiTrstNr%2BwgDNmB2BuBi6%2BB7N9LUqwbPNpTgt2TzHhJsHHk%2BKTHASUtpBTARAizFjStjHKtJrgeT98M97oT76g9WrlTn7gcQEpthQEAFtnTVtSHRlKHqxM5pAeRRrgRSgO8ZOQzt5qhbYLAGrYURGIiHhhRI0XSe5ygYQbNJDZzJxLDbD8M3rLLMo3oJ4fAvZR1xeGYfeIwWX2BfAJgk4dujuXONe6r6OJXFUYpBYbYcDH5pARgJgfYA4QExg7XkIos003gOiQEMeI4Vk9XZXFX3NTMEbfr/bIwGX8YakOB4dy043vZvraUVh/rLhBXAIRXSY3N30bAcI%2Bg5XHoq32XE32AlXoVccrSLXPXLAHX5i/zD3bXT3KXvbDRKyhHyQC3xXl3eXkzPehXPA8Y43Z3N31X%2B7er9XkIa3tQY3l3kPU3i8b37XX88MdX2X8PgPiPygEPk3VXi8I7j3laUDzCNbE7c75cTbv37GvVcPXwCPPNhP13qPTU6PT3CIK7aUL2Ec2P2BuPpXeXBPyPRP/JZ72XJ3vZanAK9tjJ0nTt80gvOTzCXLrLPLwPw3oP8YMxuobAcPqrjWbJYv2BJD6OyGMULJWbQ59XUvYnK3ggg2HkBv9XMQiwVkPn1uhJ77RBbYmdSJAENvSvaOde9vJH0vTv/ALvRAbv2XHvXvYbnhQzDj%2BbwPEp2Sgf2gRVg7hwsDNVZbDVhm47/iKxqvqYpP73JgXA5WfA%2BvhvOP5WX3mGYL/kUby2kC2foAoDxml0w7LXRfSDpfSG5f4f2XlfXPNfdfDfcPzfPbyVUz6jEAs/CfzvEA3vCQygwuweZRVOAFkxFfIAsnR3J3Z3wg1H6q65S3JDuqvVsXZtM%2BbNbYCQvgS3yXie9RO76SZgv/rLKIaBdVvVwN44B7wbYP3iiV2rZAjYJ/EYCkDIw6t%2BywyKgjclZDsh4Ql9d0NjhSBWQhSbIDkFmzFC/8mYdsU1vJjpYwDDucAhAcQT5Dv4BySmPAegLhCYCL2kIHAVAjQEEDDW2gIgRYBFqkC46mqBrLaURaEBkWgubkNqAIDON0WUhH0qCVJb4s9QuAfiAKEJYSQ1CrxJQefl1CqD1BsJR/LoSTLvs0urtPDLl1qBPUf8gbEYNIOcZa844%2BZOwTIKYCYAZivLbJOREojURom9EaHjFB1T2C3BVnbsqR0vZ15lolg7ADbzNbEFdW2ScIUB16ojkKm5rAjMtEgRJCr2ufYzGkOIJ1U6I5PRMN4OZY0QihG3eKGXVlgBtrcoxQIlVGCGYBw2JdTbjBQ76fhnBcxDyMtCaEzFKh3caoX3Gjae1haiYbor0X6JtN0itrPYp4Uv7qd1OxxCppG12jPkOkygG4lowVYU98E2Q7Msf3maLNt2ypORkm26boFROzNVmgQQgEp1ZuHQ9pFlFOBkEx49jQTvTTQBXDxOT/TNqHzHT7CUhx/bmgsL8DYc3sAyCqAIO6FiJU%2BktReC8O07HDkObfbhhx0z7eIU0lnO4dZzYrKBChMTOJhbi9TNtIMBDNzDCNhT/VAR7tAfoX0QaNU5eiw5kQEi3YVNv%2BuHKOpnjY5oidMk2DRJrUORPsUBPKCmnxyeRgAthPReZg5BFaDM44b7RriVAJH0QiRyeBJrtjzhEZRMMGSkcVhew0iQGxbQfgyJL7UcGOLIy0VeDZFGUORxGTIdyOvg8NdMa0QUe%2BmFGMCbkvKeBFKNTayijOPzfdJlkWJWcWqdedekySbQ8110I2HkVeBZyvxDRMdVNqmFTYT14MQYipmMz8GxNPk8TdBr1h5oHYxMFKD5KU3CL6jqRAHMjgcONH0ix21HJMWWUOGklUx8zCenCKtF40bR5AxXlhxJwXpLWmyJ0eiMJhcdDYXosUXynp4lQlAvo%2BZiYj1omJGaYnR/pJz66Q5UwiIxtNYk7HqoAx8MLdNiKVFXgVRuY73BqIyL/ZyRMY8HAhjqYBImxfVOsaW1NFNVlmXYsdD2OCx0t%2BxK5AHCuEcgiwxY0WZ0Zx3MHcdJxvHacf8OOjzidS/iJcf4hXHXCJObNDca1E05kE9Oe4w9AeLdHMpjxgDPwFukGYoiW%2B7HPkX2n0S0YiJJiM8WqMzgmJfImoskSk1IzFYnxW4gvq%2BLHbfi6UYE6iXFn0zGAmKSjPKuAgYl5iusy4nwMYFJGEYbxh2RhFxMtI8TR2xfa2gvwqYw4psJARLMljon%2BIpJNaK5AliSxwFCxOoiOKpJfEaTh%2B/EiiqOLfBYkcotE/%2Bso1H42dSgTQrcXqgrbbwAIkIpTszGxSOTocgk2WK5LjAiSS%2BHkiSVW28mC1XBQELEUEVGjaSC2%2BWTznkVUmycQpiYfYqCMSTrknGIQ/YrF1YDRVEoCQdgPiOrEjAr2B3KruuQ%2BxL8vOEAPKdzQKlRct%2BzvOjss1vKbwOo5eCqbuSqlukapNxEoOELv6atZOH/LKclA/JqMOpTQnIsoD87DQAug09csFyLChcmhEXbyL1KQCk5YubjeLuEHnxJdWpn3VOKIPwhItHSNgHVEqBlDmQzcb0j6RZFyBhhAmpaalqmFV6QhLA94bUDYEsAPB6AswKyAABZW8HFJeoEPVYCgCAWgXcASBKCAy9CqYerhb1VJfB3p50P6eY2UDB53MvvE8d2Q%2BkpBgi6EACEDJABNDIQaMjGfiEJBWQW8p2KyEzK9Tmc3KwIfIW2Fpn0B8aiYJmSzK%2BBsysCHMtgFzLJzKBuZiJHPpaT1QCz%2BSybYgrTJ4DiyVZPfKWdkBlmYzOZSsxWQjN5m4y1ZhaDUULLiEiz9QDwPWZLJSmsz0ZssrGQrKsg55LZfoPyTbJ2x2yucIgtVqb1XDmSTyOMv2SAHxmYAQ%2BxM36a8DJkUySiVM%2B2UWFpnBEqoLs5xg1Ajk816AisjzEzJawVppu8MGmfqDFnZyrZhs8OQZILmKzC5vsvkAmNaxGpy5XZbWfqF1k1zo5dc/OVZGblmyW5qs0uW1k7nMJK5KQJ2X3NbnMzXZMEQeSUUVkPBFZJc3CmXPT5dy2wwUM4BcGWg5y3BechuVZDXnwz15Vs/mVvKDnCDkZIc6wDqgWjWB5QQE1HE/JfmrhVQScgGfrOBnj8heXwMGRDOsBQz6A0wBWWnO5yhz80q4AABp6htQ7YckkzNjkh9n5r87%2Bf9MXRWQU5lgKBTvKLAChrAq4ZwHPNVl1yEFuoJBbgqLkxAeAo8nvuPI7nby040Ck3sSVIWrgFoKwFBVbLQWEzsgGCr%2BaTKbi0Kh5iM6mcQVwBijD5tcxedkDxYkKeFEi9zIwv9n6pbZWs3eR6EXQXAs5jM%2BRbnK%2BBKLuFKwL2SUXUXWzy0E81hQjG7JrB7SRYchQbIUWmKVFK8s%2BVYv5laLhZRYPeXopIbVzDF/ctxVwo8UWzlAcM7xerJvn3T4WyMmwPsiFCm1bQCobQAIjFidBUc3IEwg4R8Zv9ngWQfQL4DqniBMw8QK4GnATmphjZcshCCE0vE1KQAdSrGXjKrkRxSi8MMwBI0hDNLWlhIdpTPM6XtAzA6Vb%2Bg9KxjcgZFvHApYtE/lVLkgwi1MO4pWCpgZlsCVMR5GQZ5gYo3IfiJlDUAsxp8%2BzLQNPkWX%2BBH4fRZLMKWyVGVuQMoeIPF1TxtgMw6AOZYgvbAXKSoyykAPAs%2BW1KSF1gBMb9BkDGgwAMgCOB9l%2BX/LqF7YQFaQpBVPIZABACFVCsmXMJuQKwF8F5yTAEQiw5StcHApRpwrUok4AEGKHhi/LVlDS6KhrMhDUrwlaykABsp8BDz0V/iHpcQCiBfBGVyi5lY4v%2BDAB2VxWUZeMp2UosEY3IYsCwGIDWRvAnSV/vMtfmxdxl3yq8FcsG4QA%2BVZilZfip75uTtle/JGZKuOjch65FkuZQnPVXJBmlFqnwLSrdL0qiZP01MPaukAxz9Q0rVOaKpMRcqEgfS11X8vzlDKHgIqxhGKq/oSq75g%2BJwDIHlpMBZA5WGQOQDYCyBLAKa9ALIBxz8BneogCQNQkeD0AU1OnGQBmrKLkATwIAcrJYDMBwyAwiwAMAGE6gLBoZAATnKydrmAsgOGSmtaDVrpWaastZmtkAprhO0rUteWvIBwBYAKADADgHwDEAyAlAagHQAYWsAOAaAQQIIBEDiBJA0gSFVLjBDMhoBfwDMOKFpROlVgLuLICQGLhHLCQd6uBmQGNRnlEo8sDAviMXQEA1AmBOglUsPyaDs6cIT6f12tYqtrAhkViDqnfZwgQNyCkbvGAFC6hFQZMcyPAKbDb9hc0QkafMilb4KsYcGz6YhpGCrh2wSoJUPxDtnJBuQOG53mDJmCD5lACchXIuCFCPI8wUG6UDBtRxEaENw4eMLCqQXx4sNygOjTHwY0Ea04fG8PAJvZJMqRNtG3srhoY01F%2BCyqr%2BQ3nY0YrclU4F9fF07bMtTlcyq5Yujf6ztf1ylN/AdyIAAaVCQGgnlvl1AyhjQcIPgPISqxQBe8YPMRMAshnQzZg%2BKQDRrgTnWA3NHm0oDKCc0ubwtKwPPBJvw2WBLAQW%2BzSFp%2Bn8IWNWm6UHYHaihbYtuAFLUCQc3CK3NymiAFFuDIxb3NcWlTfhsC1hlNgwi/hCVqy1EQctGm0rbUCC1JL9EKSm6BkRWC4smqOS50iwHyUVoCeVc%2BLvUEm0zz4sLMeIK2RGASNoMEYdVf3BLydQkNKG3AGhvbApA4QtM2QvIQULLRHm%2BgGGWIGRoQAxZrgO8gvThqWALthc67U7Lu2udioCc4IECGQ2obVw6Gs7V9p%2B07a9tKQCGr9t23/b9th2/UMdsUIPbSgL26DnDVu1KzjVAYFHVduR2lA3taOveHsuFysrfASq4RetpcIkaOtqyuELgBSDWA%2BAVG5aKppDxkJhF32uCKsuWis6gQHO2GpTqZXU7ad9O2%2BSIRo3C4DlYwY5YulOU0xF06qzVTcr5J3L4YDyp5aFy3CvKAQ7ypVZ8ptX%2BAudcEITcgqqgQrwVkKipvrtwCG7loEK1FWbt2VxwsVOKkYLUCcU6BCV8CklUgrJUXtKVccDbXJr538q3iNO5DSkCVDLQkdIFZQA8GSoW6edAEOPUyrRQlaqdNOunQzt50p7%2BdcWlIKHqVAYqpVwuGVXKvxAHASdn81VV/V10kTrlvgKAInv5XgUs9QenPXnvahbTEwTzE1YLkL1rh85Vqn6dXuY0/S2dlu8jZRrzwAQgdBu8fRnox2I6sdUe5LWihu2L7q8fCB4HUQRY4R413amQMmtTXpqR1MgHNQIBj75r91HUZvCWqP0VrMCkUMsshD329ryA/amtYfuHXkAs1MgMdSAAnW375aVauGXDLMAPBLAAYSwOVkWA8B6AAYOGfQAeABh11sgB4CmqHUZqv9o68gJOt30zqEA8ACAHOq8ZqBBuFAKgM4WnCkGQAxgVoMAE6hgHyAXgbToumE4QB9AR%2B8gBNWMCxMZAxa8gG0CwFEB2wbWDgzgCPAcAHVn%2BwgOzMBgegODD4LAvEAPV8GaCiaz/QDH7XDqE17ATgNuv4DMADAwnSAPLTGByzhOMgYIMmCrDcBc1/AGGUUXbBZBggrQBIKBH0Bjq91UgBgAmqTVoGOD3%2Bl%2BcZGUDAAKIygTqKAbMDBEIAxQMQPeHagQBF1VlK/YwFGCUGfAiUMkFUVP2CAb9Wh%2BWvfpwDDkn9QBttWYHKwwH1yiBttYsE6iLBLAcM8rM/r7UDqP9GB7/b/v/1aHp1iAQg2gGIOkGV1FBkg%2BkeoOkBaD9B6VkwabisH2Dn%2Brg6YFkB8GBDF7YQ0alENTgdDkhjA9IY9mFBzDGBhQ1%2BSTq8GU1qhjgxodv3MAdDW62w0ID0D6AjDT%2B0w1jPMOWG/g1hvQ3wHsPBBHDRRFw0gDcMeGC10gO8nvoP3oHj9gR4I6EfCMPBIjpQGI3EdKCJGkgZIBhakeGNS60T7UbI/wFyPlr8jeqR/T4ZkAv639g6/w1gfHXYGADlakADwADBmAeA5WNtQGHKxwzm89amYIsEWDRK1DqB1o8fvxO4GejKAcQR4EGNMAkAwnRgKQGlP0mST4JykzIDRldg9g8oIIyEZSiwn4T0R54LEfaj5AsgUJrU2EYiNRHET7QYUxWqrU8BFgdah4NDMbUNGG1vJuGcgdJN%2BHP97RkQH/ppN5G99PAL020awM4GK10%2BcMIMrhlAA) is how GodBolt compares the CMSIS and CPPReg versions. Looking at the assembly, it's pretty darn close, with no performance diffirence (only minor instruction re-ordering). ![Assembly Comparison](Assembly_Comparison.PNG)