diff --git a/Assembly_Comparison.PNG b/Assembly_Comparison.PNG index 53d06d1..29b5eb1 100644 Binary files a/Assembly_Comparison.PNG and b/Assembly_Comparison.PNG differ diff --git a/Performance.md b/Performance.md index bb0f43f..1e92abe 100644 --- a/Performance.md +++ b/Performance.md @@ -35,7 +35,7 @@ For a test example, let's use an imaginary Cortex M0 based microcontroller with ## CMSIS Style -This snippet is based on a CMSIS style code, which makes heavy use of preprocessor macros (the defines) and just maps a struct right onto memory. +This snippet is based on a CMSIS style code, which makes heavy use of preprocessor macros (the defines) and just maps a struct right onto memory. Notice how we have to do all the binary arithmetic ourselves which is extremely error prone. ```c #include @@ -88,7 +88,7 @@ void Demo_CMSIS(){ ## CPPReg style -This is written to mimic the CMSIS example as close as possible. +This is written to mimic the CMSIS example as close as possible. We let CPPReg handle the binary arithmetic for us as well as get all the typesafety and compile time overflow checks by CPPReg. While the CPPReg version is somewhat more verboese for setting up the registers, it is much easier to work with on the consumer end. ```c++ #include "cppreg-all.h" @@ -96,14 +96,14 @@ This is written to mimic the CMSIS example as close as possible. struct GPIO { struct GPIO_Cluster : cppreg::RegisterPack<0xF0A03110, 4u> {}; - struct Direction : cppreg::PackedRegister { + struct Direction : cppreg::PackedRegister { using PIN0 = cppreg::Field; using PIN1 = cppreg::Field; using PIN2 = cppreg::Field; using PIN3 = cppreg::Field; }; - struct Toggle : cppreg::PackedRegister { + struct Toggle : cppreg::PackedRegister { using PIN0 = cppreg::Field; using PIN1 = cppreg::Field; using PIN2 = cppreg::Field; @@ -115,11 +115,11 @@ struct GPIO { struct UART { struct UART_Cluster : cppreg::RegisterPack<0xF0A03120, 2u> {}; - struct TXFIFO : cppreg::PackedRegister { - using DATA = cppreg::Field; + struct TXFIFO : cppreg::PackedRegister { + using DATA = cppreg::Field; }; - struct STATUS : cppreg::PackedRegister { + struct STATUS : cppreg::PackedRegister { using Enable = cppreg::Field; using Reserved0 = cppreg::Field; using Sending = cppreg::Field; @@ -157,10 +157,6 @@ void Demo_CPPReg(void){ ## Assembly results -[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). +[This](https://godbolt.org/#z:OYLghAFBqd5TKALEBjA9gEwKYFFMCWALugE4A0BIEAViAIzkA2AhgHaioCkATAEK8%2B5AM7oArqVTYQAcgD0csGADUqAA5rS2YMqYEARqRakAngDouABgCCcgFR2r15XeUABAGYEm2ZX//qmtoAtCxMTGZITi7uLGJESGT%2BygByBBiswsoAwqxiAG7YemzKEGyoeYXFbsLYbJgmbNhmGAC2AJTRrm4YaiakBMBIRDnofQNDIzyW9JbB0/QAHMoAynUNTaOkambK1uHKE8NZWrWkhZgWNi5yTnc8AMwE5UxiOMpcD9mowkSEbERPrh7k8Xm9fJ9skQTGpsAB9IhGYjCIEg54VcEfL4eMTlIgEdBsMKomy8UEY96QvStZEk6xOBSqDRaYBwgAi2C8TWEkTRHnqnJyAAUhQAlXAAcTh2RF4qlbNwADEAJIpXArOEACRBOC5vhlYsl0tlRoVKrVGu1NiJrWwwjULCkTKCOi4AHYBNd/GJhM8dNZMJhTsIEVi2cpfpgQCAxM8iGpEQjPp7nP46mJWqpMllRdo%2BMQVgQAF4Qj3RZL%2BfSLcgV8sV5T6egANhr/jrFf0Dx4rb87eS%2BibABZa17e262cn2z6/cpFQQipgAOoETAJUOfcOR6OxgGLJMPFPJaccWfzpiYADyHg8tSI64em7%2B27je8BB/bRGwrTUrE/WKhMJ1CwtrKAAKnSyS/KQYioCM0KwnCrQsMIADWHxlqOFYYGwvzYAAHpoEZECw%2BKoKohK/GByj5GEYgQg%2BRFRiAbAZtgAyoHC1K0l84EPLg0ZIXhECdO%2BmHuhOon0uOILrAQHi9qSNiMqBSJEDyUSko8ckCvJBpynCoGitYyqgZaOqcs8%2BomlKhnGaZWpODadoOk6gQsuhh7%2BJ%2B36/vR2S5sA%2BZEIWJarBB/hQTBIygYBKksNxnl%2BN5P4kX5QJEdBsFgbFqkol8AVBSF0ggFW6XuolFbHjo8H0Y%2BTE7kQr6TphyTYbhBGkERJHpOROEjFuMYvqG%2BjEHCvqhRuyiLGIzWpvWbWfh1XWkb1lEDQ1r4NiYn5jcWtUNqN42%2BHIU0zZJyTibNyTJb5/7pZFWUxbCcXcf5eYFnt0aNk2ZUYXNlW%2BieNVhoxz4As2%2B4Va1FGLYRvzdWRC2g4Nu7DYde0g82Z1QwEMP4XDxErUj61DSM%2BjbfCR0gyNd5Uyd01XW20nnV5X4pX%2BkL3YiUXZc9uWQgVH0ll9Xa/TjfhVcowOTSTAJdpDfa431%2BOdfDRMw8jG1o7TGOTV22OK34C0q8tPXE0%2BKONcNFO7RNDE07bx2nYzY4SRVN2pXdfEZTzT3YC9akC%2B9wWfSVQ5i4byiS9LDGy0QQ4Ky1SvtQTCOrf1Fta2T6N2%2BGQ4G0nRt40tatmxrcebeTO1U5NDt087LOu7Nl2aQ8snyR8im2CdyoAmxRJMOpfI6cKhpSqqoG4KKKTWAAMmZre6pZo/6RPU8z/PDnWsBzmOr4bnaB5jk7/ae/KHG/dhFk5Ufmzt2c4XUuAU5YHkJHoHUbR2Bv4/H9cYCYk%2BLtgeiMVASBsCoBQnCdAhRSAeCYOgAA7soEAyML7ACMEwOEC12BvmyPodA6AmA1hoq8NKDF/4R2Zu7O%2BntIQBiDHaEMIwWCBmDDWAaR1QxhEGGwW0AJwp%2BBAefEMPDgBNEwCgtBfcMFhGwTDXBD9/r9kIcQyOEBWGMOENfHgTZShiL4XUEYwRlD0HaO0MMk1LCR3rLYux9i7ERzEtQ2%2BPk6FfAYcGbhbCmEcMznGeWIw2A1kFiHUKLJHaCJ9llW0rQyAmEQiwNQR9H6S1iXCYwRgEkjBlhbTJLATBKIcX4fIRDuo%2BCfrCF%2BfsA55WyBEo6QJow1R/so2xJQTpHXQB4CANVqk5XioHL4DS9pNJADVToj9inTNsaiRuFZS5kXSfk7JvA9ErJdgswm6QMnaLYkQCANj/AEFEXocR2BMCQk0ew3m/t%2BbDO0JEviX0baNOeSAUhdFWnTN4DwWJ8TElqFQfoZCvhrlMJEcoGkwhQhnIkcoDwSQWQnM/J1GqvyjnFJEhVS68yPYcw8T47R3itHCD8fVAJPBQzBOUKEoqhxHlvOBJhPpO8oVfgBUhNQVyiVkuUDSkZJYxnLNIFkpMujI7/NMICnlpKawCsZaM95KyQZ2EOVM/wWgL7bC0HeVAyE8GspAlKhJXLZU3IVayJlmKUEgBFWKogjg%2BLqraQ48F2ibWTNdcobFdxpKkn9fSR47cFL0iUidawqApDaKFEQ9I5gNJBqePyXUK8jTWGyNkdUKwhQXlnsqbIABNLeSal6bD0umzN2bc35qLSWpyp9XLMkPjfFltCCUASqWygAst25UF4EQ1iNb4UCNYP5IVQjWOcC4rw3mwHeEY3S51vmZf9YRAUUVsVzKwlJ3rjYl22YjDWBCiEiIRAMfIBAwiWI1X4CAE60IbkmjVRJqFIS8X4h8r%2BFi1lrNKEu28liGKWDEL6x%2B%2BK/LDuUAAVRBqUlcUTkjPGKL4RZVEtCsJddMpGvb%2B3ir0a0Gk6A4Q4EvVIb5xSoMDSAvoHwcI5KQiUCc89BBL1hBrNBp1n6Y7hhYuEBMpAbUzP8BYtg6B8JSATLu6ZuqJAlEWdgg176gRQEIwSEj2AyMQl0VC5CKEf1AO9gB%2BdYHvW4vFlLdtkHn5stg5NeDlygGP2Q8vNDH8MOYCw8UnDfaB2Ah02p4jpH0jfxtVRi2NG6MMa%2BMxxErGr3EJg1x5pgEQZ8aYAJoTwmfX8vE3hSTOS/oyfnXJ02HF9W/GU86wLGmtOmccS45xbtXHs2s12kCuG/NDpsyBUdVEH1TrPJea8t5QzGZXcA7mWUN24VIIuAYHMiu2P3andWfUGyqLPXFtjTAb3euSPevTQHwwvofVVz9nzsA/olTpiA43jvKBA/V2xEH/xQbswxBziHjlsBQ2V6i6AVzKEQQt7AXmHGdfw1CojtWQsUYcR/S78P7HhaYpF%2BE0XshMeYRehLHHkvjNS5NdLmXb3ZfrKJvLBXpPFJq8Fp0uSEaKcqzxFTWW71080yFj4OmAB%2BD6f1umyKUCAl2vbC/G9dgjemvXTOe/WczkdXuQne3BwHjnV12Jc5sNDDngeg/B/YyH/mCMw/p6FsniOv7I7saj6M6P6MeEhLF3H7GktjJ4/ysQ/HETs/JzlsTEnsBSdbft/wnOtNwa/psi6jX/qK7bW4jtSueu%2BGN919rI6x26cnaeGdI351jYL0QbPl32xRPXdoTdc3QfZAUQCGn81i6rbLutk9u2XfxevU%2Bsnh3UIPdO3p870ZLtS7/Xd4vD2nsx9ZkntrQEQIffDF9pz3rteocPQDoHIPiBg5tcbv9Ee4dhdT8jB3mPscsZ2/jj3ROGIk992T/3InctB5D0thxR%2BGex0PczvBH7Ddpl70zcucGc%2BcBd0JhcoAxdOYvhlBJcedpdUJZcsUZ8m55lrorM3tT8l8t8NdI519/s9cd9PxADbED8AsQCtMbcXtT9qMiRaMMcncYsccu9EtONb9YQ0tvcMtH8w9n8A8qdg9CsLNkgv99oy8MCmZmsmtNlhEPNoFfsTBG8KxlcvgoN09KkF8s9%2Bs9NBt89l0i9l1vs/BCC3MGVMMfM8MTdod1NzdKc38RCbVZNSASgZtUVt1HNshNC%2BsBt4Di8xkPNgC7DQCrs0D0IZD4849IIpsRgFCSDfBUEFDCQmBlDQ9bcsCVdT9NCoM%2Btx09C89zxZ1RtF0AjV8tdftXNN9iCDcKDTcQjqC/d/ckYrcyEHD8thCVC7F3C2J5td9IQfCaw/DxsxkEjgigtQiSFv1wiE9vU1DsgT9M9lAcjT88ic8UJ9Ciji8jDbxS9o9H4TDz5Kiddqj1d9dd8IA6jbCJi6tX8Oj39RD/Aeia9d868%2BpFEvhBj1iaxxspiyFDjkhowxjxD5daxoiXtMj1DsjfNB0tDqls8ztyjbEzDTigdbxLiYSbCQTI5A97inCydni%2BjPw3j4YBFPjMSx0hiCiQMqS30kSHEgSDdsSpD0CLN5iNCKS4S2U1jETNdkTjiN8049cKhsBjAMTrDD8qCQsUD6xcTqd0jilCTa9688Evi/CaTlB%2Bch96T7FGSLjmSLNZiMi59sCliVilieTtS%2BT6wUShSziSBgBgAfBxS/NJSGjpScShCHibVxCQYFMKt/8VNxjYcpAf0ABWXAdY0E2PSImMuQ2I84naFItIj/VQyEztbQ5Yzk3IhEgo6dLYww0o4wnUpDAUogs4sYq48QmggQuxFoz%2BNou4%2BU1M7oqvWbIk7AAYzkvrQfOk7ID9Efa3R7M6T9MYv3askXGAr4SEfw5dKXKMpo2spchxaM6Q8I%2BYxYzM80zMy03PfM4bQs2c3YqiMvA4ksn7P7XXCs2ozEt0m46UpszohUhxJU14lUopbLL43slCYfL9MhGsDU6Ar%2BcXI8kzRAhcp/WsgE/wPU0gg0yOI0tcySFuJNENTuMNbuZYvTXkVubSVNCtKUbtawFYAAaRLTJDLSsjHjhCItIvrRPhcn3mbVdFTPZOyL033GtPThNm7Q4pGCQhQnhAfQgCRn3OXFXCQFDEQRXASHaObIsxcJKGkokqnyxEVHZxA0XLsRAHZ39KU0%2BL4rZ0gorEO0EtfR/IMtQk4ogDEpkskoOWUoSGUBMTMQMwWLgLMUgNMXZ1BMQqSnTI0MMp1JW06l4qsv4pYDMuECQDkk/EwHMpEo1lsokqkrsprOXIcVEqG2KMLyLNvDkqfJbM1RK1cLKz/wGKCtwFMqEu1O8MqogEcqQDcpnMl02VmJQrJDQruHDVWCQFYSQQADUv4cKk08LBQCK4QVhNRrA2QLxFwBq55oNcByLHhKK00pQpqZq5qFrZ4lr6LbRG0mKXQVC2Kljniax28o5agxo%2BrMAkEK8EyVhbqkEpEBoPAr54RpYyxwT/KTSsizq2zUUHrMoRgnr%2BrEEg5gBq8h1oJOzvZUEBpuZPqiciqhFN8oNniUsuDorwa4RJCcUfrLM/qoSAaobZsokMbAa2IsbfAwa7qIb8oqaKApZYaxkcb6a8bgKe9vVMaQBTh51m5A1Or6g5JQ0GQTpu02JgBsAOyRqyQxrdJrIaKp4JRcBFxRQTJlqrRS0LJy0lbu0Va1aNbJ59rd4m1jrnyibWs7pwNT9zqU9Sbq8abvjI59ycqF1QKS8HbMzebgZTz49vYKhkIshJbSBpaOyEQfIVDNBWNUodLUlAYdAQVrrPdKaybUUabwiFNg79kIAlBeb2akFBz/ytK2weA/kpbfAEjIUxMWEaJvAWBGCEUkhC7kExdkVyby7Vyi5lYD004kZk7kauCMko0MxvdUp4qpyJxe9Rcubpy4CEDD8ZdwiQr/sB7QUERUt5FWgRoJFzKQZESLNQ7w7QdI6fxhIj5Ca1AxBaN0h4618yy0Nj6ZbT6iAo6BKwcCqHiGUiBSsb5qEIjwjn6I637z6cNK6QGfI1kDNwwcAfBPwgGIHX6oGdMxg2ISIyANxEr1tgHkGfxoGQY4H504aj6kHd8z6mA/00GjASBBMHxLiyGdpQHKGbsmwYHlAiGEGWTljGHPqo7qGMG6G2QGGw6X7yHmH2HOGSHI5cHxGfIRGT65H8HWHJGihiHwjCC9c7qmgL6kZf0dM5TCrHiko7ambowqypTv9p7%2BCKxebSBEFEIvwQzP7wjkhXziT3zpzjKuSQJeb08/c06nbCdYR0q7Ft7d6LlzLQnbEaS/cR7UAx7fJJ79ibGlzRimTLGwjuG/K0ziaFiycoNFRom/BB7N6uCmgHGkdNzqkQZZGmGoGvHUmnimbimTLwnLJ4qH0vLFQBIZdWnkhYnvGIB4nEmJ7OayFwLecem7UZcvKoAKnxm6IQLpnF6JVvGMrplpmBdS6oLzzew9mjiUNvaX56DG6otmD8mbGIBtUB5hBowwEIEoEYE2J4F7rGnydAnZsab5VsBKmhybLen%2B85lIyVni8ZSNnikxlR9WnwJ1nhNODOzWHI5pKEhdGNZ9G9FDHvSyds69lSADkBpmNhAd4PyIWvJT9pmHQtAAQ4QO7UV%2Bn/dnidn/coXrdmWLpy6vAFwa70ARgPBSB0BMwEhUM2U6W2Ijj2VRG4QEjflu6KxFLkY4lCgIBQJenBLhI5WcmcmNzbbHbZt0rPmM7gnfAztAEuKg7tEeHRGOzo6b69BUB767FJZSnU7TH07qbjXNkY6aJPxHXltm9VZN916U6t62gInOmjtJpD72xr7b6HXI5V6n7eHdN1Xg2h7fBR9HzsWbGFW6mwdR8ZjCbkg82FGxGEHWGoVEEv6AFvVUERnWhx64rFmwdWhEEzB63G3InM3/7YzyDeHsHKI82CHJopHEHrXQcqHYQaHMH6HwHx3%2BjdFVH4HpHH4h3UGp3BGsG12fpF3CG1GuGLNNGzjtHP705EC/0sX8SbHDWPWLH3SrG/c7GHH0lzdhJXHmn3WXiuHLmPm3Wgn/HvGXXAIGW/B2m96Bs/dNK4XZl3lgTMmawO2knm3NWi3Z9rb/rMz1KDnCCh3GbP2EOw2On973RhctmrTgdiBE0gC02ymM3v1z2DGvSr3plcWzgCWLYiWSX3myXyWljKXjAjFaWWn2XbEmXoOBDWWS7xOFdOWhseW%2BWBWhXwEIxRWmaJXbQpWZWu732/BKW41UATBmksCZXuPhMgOQm/dzOLcmndPAWNi/dQXjDpPycVNEOxmkcGy6I5XkhFK/cBolW99xPcO3p8PSgwPImumSPZw7ORIuLyc1Wwc3Om2C3nORNC3e2/BvW47I5WPc786zGQBW7i6vlmXfkNPpbEzfATlcs674pWAm7EVVZnq27gKxXBNtPuHV6S2LE63HQEmG2kPLsIAntL6MusIA2rXFHSCaO/aevlAkuu2v5RdBcBBUOSmN7gYFvkn/j5l2qhbg0RaO5urMLni5atIU1xqla5RlQVhJ5RQVqHg1qJrrvbup5TbDrnR3JLadXvVPEmFQwIl3UyVI46UMZBVrPbdViBlXpweEWGVRsp7Hs8JLB0rLqfRKZmuQZ3rB5OyzXJsQbaU1PLajxE6tCQZcjoehl6lFUhV3l0VuHJZjc1dfxvBfB6eLNJZW6QY6a3mQvoarqMfwa5kLNE2g2NY/viUyYN6geQZAfeUV6Ju0NzYKVUZ%2BpdYHwbUal7lqerUlVP064lURfFexf1tgZ%2BackGJzfm2s7N8rj7HHHWhnGL7ifbEFW1UtU%2B4dVC8AyuzrDXAFoVNSmgfzF0ubf%2B6NY7fiMX3QjnfUb5WSqSh3fsBtUgg9V9LvgI/MT/eYZA/pfeUQ/sm1urb74SbMPDjbSVpgvCnowqXBO2up07PDjyv4QxikZq/jXPOrss3mPilfPvGq%2BKWa%2BBOaX6/ouZm6S4vikEuoBZ6JnYDSPoxVm9EyPkCUOxvMC8nqm2UinNzO/WncjaneGKHSWZl2/a%2BR/hPvGV/7Or/F/i8QPO%2BROXODny/H7D1jm2VTnGDHcT%2BKjUVbn7m4CSBNAlgSvMGaP7bLC0j36lBr%2BWIYEN7Ec75Un%2BPyd5FU0tzIDawdPQCBi0lSV1pWBuatl0Vd4J9FWzzFVtPwL6Gki%2BuXfFhACphKArEYgB/jJx4CY0GUn7DhrrWIAEglKlHZQCWAFYRhRkHXCzDQIOQ2obmV8aMMxgMQXJIQcvOVLclqTyCaecNfXq8j142piuEPSFuXTYEy9qu0KWFLwguTN1OobXLQhimk6%2BU48HVA7oQCO5dxGQzxIUI6BQhndk0I8Z7pKBu53chQGaMitrQoq60qK%2BkF7n4ICHvdGKn3FtKxXTKRwJezCBsHnzlQ5d/EcsKlCMBchQIq4lMUZGa2iQjAXBbgogT3RTiBtw%2B62RIaGGyFwhB61MFIcGAV690W8R6dbHHECRCCSw9GNgHUIpjXwGItQ3IU8gJpjcfukPPVqilcGQJ0qoPcJKoPSodDMhB0O8L8Q/69ZKedSWHlgK4JW9EelgZHqj02zo8bq4NLHh9XLw6lhE0wwSpgGeJSImWpnWxkzRuFD9gB9QwQKUAdj3Z6YoGdKuD3%2BF2hC8aA71CcNboYD7ETiUEaT1KZfcGIjwiAS%2BReFuC3hOQ0FDzj4BfDRoPw06O0FaYAjnCQIu8CCOmRgjmuEIzAfAI56k90kXKe8OGEkGDwBIHKaVGaieGtlP2rwkAEMNBStNihkCaMFwmeB9DPwwPMnLD1S4bNheBBN/mnCgywjtA5jW8jpnt7R8tMF9S9qUPj6/1SqtIpJAiGjAbIwyfAb4QEUlHTIToWvQZFsNUFjIDeQqMMuvyQqHtZRa2SiPKI3osglREpFUVHycavtCBLvesAqz1FqADRIAI0SaOxFmibOS5S0ZsJUG69ae%2BvHOJ2UdGh9uGYgsgvWCtEw9bR7yYYTXH4BYjVhk%2BX4c1Q17eN%2BRKEQUXtB6Eii7QrTX5DcLYHZDTBFg6rs8zgQIJpKQMZTtkKsGxiKwcrLMRIM94ACQAMguFHIPZGKlkRAo7kW4LqG8i/cuYqntsPUHVx8hQ45/hdjZZk5mxbgi5K2JKH1CDBWQIwbIMkSNd2B1eSweXR2Yjjf8OdWgWOP/5SDJxpyEwV4Ufbziaxi494eiM%2BEQBTRy6ZQOWIf5ribRSYtQS8i3FCpzRjiVAfuJsaHjIEx4sxp7WUDnioUJyYwecmvFIo1O6KB8dYLaqE1Tq2hMwNRLAjA0eYNw3uDgDwgzggxV1GcL/R/CfVyedBC2BxJ8DvpqJFgQzEbxaEVC3RGcJiFwiCRwg1GrQAYdYxY68SxAnEp5FCGUl0YV02g9cumU4R1iRgKQQ4pLFkncSliiNdSfCFklGJIQKQIdOZM4qZ1duFEnSRbCkldR8W5KWsd0JGDrA6JWURrpxEITJJWJlEl%2BIqFxDcBsOronqHriSQ/gTAGopjlqOSBhTygwkMwK9gEa0M32XweGPixUzedjk8kOgcRHxb/hlA6wcFtMn8kIIxgkIXKTkmLH0BvcNYHyXTywKxTUikIFKRFKqpr9m453ebtgh/A%2BhhpAw%2BAeGAWCDhLAPAWeErgCqn4Lw3KSKZeVRKSIOp8UxaRiwRSBi4%2BSGIqfVLKkVSkptiHpISxkSYJ5E7xMktkF0leS/ExgCbN9TZAFT6w1UwKXVJKkNTMRTUxLK1M/TrTipTERrogmMBeFNpzqDwJQJtQ5M4yyFewaLXQqwyaEeTW6VxL%2Bn48eYb02qV8HWAtT6gUI40uh1L6hTwpr/FaXaSBwAydpq3SIvLXkhwghprwe0EzLgGTRJp002aeBnmlLFwZk/UwlFLIgxSNAqRCAJtIraQzu%2Bo3fqW3EO6hokZLWEvhmRfiMT8IFyG4b5KyFLiapySVBFjKWnZAUeygFWXhDVkojmIMknwHJKoS0z9uMshwWLR6r7kPBCtdanCHCFTwVQuAWeGyAe5PcruPg17qKE9neyohZ8A%2BCxWRlEzERqhU/HwFBT21H4yVNcHyyGzSs0qrtbKtsRTkLhoE9/dYb4EjTRphAsae1oUjx6YRhE%2B5LUZLHP53gLBk0OObUEeHUj2Jd%2BE7KflrlCdP2DkluSeCZ7PoO5w/OuQVwPwM9SeagfTmkQYiFymEJc%2BNM0PKFr0kqQ2cSsnIo4qVJoXLc8GnIkoLzYYYk1vJRDdpZysJm81OSMU67G9Kh7o1LJFwYgf0bqsVCLrVXp5VVGqzAnjhlVaqXzRJS8tvJtj6ohgue3NaZJ3La6CjmuWk7hpRMf4HNhEDzYAV2LAFSJGRdzNAEAKeagCexv/WghZzJwkjikfeR9IZkjKtVEJn8tsN7B7YaMBZZPIItTMJE6iSgE80uUZxNIeZfeXWLQrSQ2Ke0jKsYsBQVwFYO8nelUiheIuSB9ToF3MnciZLUEyjyZK0L7I/Fb4aw7cIAc/BcyUCALTh9NMdHDxS7epNRrE5ICwvjRsLraJnbwtmWA7fE%2BFzqP3IIu7l81n2/omPniL9z%2B0JFEiqRWyRkU1MB5sIMmVUQpmXIVFBuNvjxLRwMFzmkIHRa3X0U7C6ObRT0o4WOl%2BB3GcNDMhnm/h2KL5fMisLBTBxOKgmRXQrs12bZ/EvOOnZQGYoM4WLboVi7cjkvMoYdJOXyYcvwvJwlKvmLikRQGIf49KjWZS1utb3IXeL/cviuaXkz9pDkD%2B9mdXMEpOIIx85Z%2BGJUwRwX1htFyEXRfdQPFIsycCCzBS82wVfBJCe4qTjY1hY7iZkCLZFgQMlkmL/AdSwzuMmM4TtyS1hHJTwp%2BL39YFVVRxUPK7lBNVRbi9UWIomXiKplXMmZalg87zLPsiy5aSEtIirKv%2BsS2cfWHiXkj9lO7H6IcowUgCTlvPc5doJhYUj9m3GbAeEouIMKycYxAtoXydH8zFF0Us4uiTpU2MXlDS1KDalvCcLYSUA3khACGUetQVjvAMdCofqsrBZZxEUmKU5WgLJ5PKhBocp8DGABVJebhesRUyirSA0YcVaIqlUVEZVeBKWOgEdLOlFVxSblW8rnxhYLVTpLJc0p1XOo9VBq1xRKvcXGr%2BSpqy6kS3nQJS0lTyvwAqxspDYDVopTzDA0mhELWZRmMFj6ptK0L/VIYeVaQCDV4l0lP9UrOGoXCRrMMMa4DKBgzGiDnxeLA5O6sK7q9xp68hIB/I5Y8At5kiRqpClYCiM0UfVZhUPNvGzYuhiLHgE%2BKZwvjK1QK8BdWrti1rW1nwtYc51%2BT3ZPhra6ru2ulqdr2AtSntRYMaQiC0hw6itQ1TsrKAGBxahtWXR4BloZwLAQopImBjdI61SAYcvJ2wnhAkEcgndbIWQq2yuqXcYRBKCFD9oVCv6/9QOlyA%2BhUUUicOdGGrGQgDhioGwJYAeD0BZgNYQcCOSlnIUK5CZNkAQC0CwQeBEG5itGBuEYTP2kIP9XhlA36sYhoAEAHMOKhVgAKBM2xJLH/UpBLAlC8MJBpAD7lIQ2G3DfiEJA1geATA4cjWC43xEPlVIyOCxtVD0AON1G6MDxq%2BB8aIEAmmlMJqE0ibxNUa/Af0WEnSbSerGngPJq41KbsgKmvDYJuUAablAqGsTYRr5o6aTOUmhOjOFY0PATNDmszRZrU2aaawTYLTQ5ok16aXNURWmZhoJ6gRHVFSVBFxuI13CmaZG4DdKCZn0sFNtG4OEVC%2BjVgpoTG%2BsDJrY0gxTNQ2d9NFtyVNSAKgWl0EUsUKdT9Nrmk8Kxrk2TRitC4UrZavK0iaKt6WhIrVsKT1boRbm1UMZpa1eaStPEMrTWG602auNvW5MtKIa06B3NRWsbW1om0daptImh4FVq9EgA5tShBbYNpPC5gzgFwFbdVu43jb%2Byk25QNtpQ07bFRjm1hH1sO3yyA04W6wMImgzWBRQH8S2l9p%2B2gQUtYG8VrFoc3QavgsG%2BDYhumCabrZzcCLb7AAAaKoRUBeAI0Xb4tCI77b9uB1UauNdG7LYxqoVx9JYbIawKBGcCjaLtZm0CCjuVBo6aw00ACvZou37a6toWt7RhRiIE9buFO6DCsAx27asdiWr4DjqB2Ua0tBOzLaHAY25aSdvcnQLgHWXnbdtZmvnaBAF2baWd6W4LVw053MbSeJ2tiBcHY3U61dV2jXVrus1dbWdu25IgdoG1OtSeawEWieHN2Pb1dlOzXSsG123a7dj2vXfIrHkzhjd5wC5M1oYitbzwkIK3b7ts0ibBwAemjQ7o53kSbZH2vXByDiTGgxQ2gUXOrk6CplGQvFQSlLH7HPAsg%2BgMFCUHEDxh4gVwf6ORovDRgfNPA5kZpw%2BXZBm9renDapvb0gAmtKmMxJHDMAosogXwHvSADb2EgiNqoB4MPvaBmAT22UlMO2EZDK6zmbPZTuLsb3JBxd0YOPdGE32MFBRga0zOvpOizxAp8BWBGYM0xsQ99/gRBDFWdJI0i9FmRkEKHiDYSMoM4OMOgHL2%2BBUdF4J/fWAP0gA6dIB1vRTusBFLGMMgTUGABkD5TwiEBqAwzpb3T7YD8Br4MgYIDIHUDGG71IyBWCfSIwskE8HXrAhI7ZwmB3qJ%2BABA8hI4EBo/XajwFWLWD3ugXcfvWVTbUDZOMfZR0hBcH%2BdKwQ/ZQeAD8HnUS%2BlfRfsfiMhFwgyKWN4F2zCsYMgOyFCezAMVgX9rPCAKIZ90SG3dNGgNQcnMRSyu4diZSGVqAPKBm9Oh5IFPqi0daO90tXTd%2B2cNla59bG6Q71JtRCGEgSW/tNGBcNOqfDDwPw2lLkPp6/UbIGQHiKYCyAwyMgcgGwFkCWBUj6AWQAsX4CfDRAEgMAohtSNEAMjCRvETWLDKWAzAg4N0IsDdBugmwCwRDQAE4wy7R5gLIEHCpHWgIAKo2kbKPkBsjMgVI3cxR6lGZAmRvEXAFgAoAMAOAfAMQDICUBqAdAbsKwA4BoBBAggEQOIEkDSAUDWkMEJSByl/A4wvIVfOLVWCxEsgJAXTMkkJB3GTUZg8qY6AfVTsCAagcBJgkb3BC9Qg0gDaUhZ78SbANUVNMIktoMyANWcZQGyGVDih%2By/aAyQeHAknRG52mTEQcMsDWJMIUJ9HTCdAgXgJQEoWeFSOSCMh0TGIpHjMDiP2HktfsDkMwRTBgnBQEJ1MniajikwaDIB5MH4ApNATixWJnE/9A5Mwm49vJ1E8oEpOfCsT9AWk%2BLoMiARGTCOzCpLTiSmBsJvKF4%2BoZf1sRfAsIT498avhCCiAvx1aiEOUBCgp4yoIUJqDhB8BiKkZKAA1ECTtAod1gBDUhssBeo/jy8ZvdYHtOOnSgVpjWracDMrBIyMp5Htie9PmR/jzekXM3sVOwhGTLgCxP6fDO4AfT5p/4wqcpMQAQzNpu0w6YjNUmhTswbM49wtPi6RcCphk4KDsAWI8zoKH0zYCz0cppQ3aFYDdwL0rgP9l%2BrCmXuTKWnZN2E%2BoCOZSAea7jde6%2BiMHH3rE/QOhpGA1AhgjA4TCJ0CEibhCsaaKxFEiiDGG6NgmpIFCAHJtcCDrBcUBSwEebEAnmPN55qGS1Gb3BAgQ653AIiYvApADzz518/CffObnPzkzN8x%2BZSDbnVQu50ipedKDHn5%2B0FmIBebmYwX56UBe89ZsfPc7/AG%2BlXeod33thlzXJhU3HrhC4AZ4fAUkyDFlMFx/o4ul83xDj0gwaLQIei1F0IvcGNQJF6wGRdC0Dnr9YwW/eK0a4P7SAOhvQ2/thr9mFDJ0b/Swj/0ngADdhkA44f8CMW%2BIGBtHSDGQNIGUD3DFS7gDUvo7Jo%2BBwg8QesMnQyDD0igyYfgI/66ddB9S9hEYNqQlLZQkYDCdYtiHJqJFuEykAlCYxbzsFhfTpcB20X1QbFhi8FaYthWWLgOyamxeIukXyL0V3HURYjMpBvLEoFU6ZeUBKHiAKhg4Dhc0PVdtDyLV/b4CgC6XmLOmdyz7s8tpXVQEoCxMevDAjdqFVh2xDYY612GHDkcH86paJMknIzDEXq3pf6uJWhc0F/y8hcexQXTzk19ysLgeA2DrG4kBI50ZkApGBjkxrIzke2PFiCj%2BxnnF2BKNlHzE5AcBKwmprCQ1r3R8gL0f6PpGtrQx2QKMZADjGTrFRkAIOEHBmAHglgN0JYDDKLAeA9AN0IOHoAPA3Q6x2QA8FSMPXMjT1kY%2BQAmNTHyAMxhAPAAgBzHBWagVnhQCoCJVvwuNiMaQFaBuhkNXgJgKijuYgTBju9YwIZxkD0BUjbQfhEQAvBKFBjOAJCBwB8Cc2%2B9eGwoHc0euqyEmvrRm6kYvhJHHrcWXo1tcSPsBOAu1oQHoH0B3NIAeIsYGpqFvBBIwG4bgHkf4BIbnKF4LIMEFaAJAMw%2BgUY3sakAMBEjyR2G4MeGM/bu0ygYAFGmUBugzAPAMwHJrKCEgu%2BEARY7Q0OuMBRghNnwJ1DJCeVcjAgfgMdblt4jzrOAfVVdZrGDgWjZgMMsDfLoQ2WjiwJsIsEsCDgwy11no30ZR5w3triNsY0jZOuo3EAmNtANjdxsrGCbONyO8TdJvk3vAVN6gPoFpvPB6bsgJm%2BQBZtGJ2bqRTm1%2BAVu83HrhAfjaxjtCDGRb8QA46PcluDGZb9djY4rYNvK2DAatq65rZ4Ha3dbD4fW3Hb4BG3ggJt5yubaQCW3rbhR6QIOrWsbWq7CNl227Y9te2fbftsTE0AsRB3CAIdskN2HDsd3xW4DixLHcEAJ2pjSdqNZdftsyAbrd1yu07eesiBXrddxO%2BQBrE8A/7YZFo26DDKDguwtRmYIsEWBJ6pbMNza/DeGMIPVraNpuw4I8Bt2mASAO5owFIA8OQAb9qWx/awcyBsN14PYKKFdvu2yIf9326UEAdd98gWQb%2BzI89ve35H/toByw9OuEPFgNRh4IhvqMl26jtDwcFDbQeO3HrzDnB29fwdS2eAVjph9g%2BRvlHyAsCX0LPsHBAA%3D%3D%3D) is how GodBolt compares the CMSIS and CPPReg versions. Looking at the assembly, it's pretty darn close, with the only diffirence being when to save registers onto the stack (in this case having no performance penalty). In this case (as well as others which have been tested), there is **no** performance penalty which is checked by comparing the assembly. ![Assembly Comparison](Assembly_Comparison.PNG) - -## Full working example - -Lets say we are using a Cortex M0 based microcontroller like the [CY8C4013SXI-400](https://www.digikey.com/product-detail/en/cypress-semiconductor-corp/CY8C4013SXI-400/CY8C4013SXI-400-ND/4842995), the smallest ARM based microcontroller avaliable on Digikey at $1.32 in single unity quantities. It has a meager 8 kB of flash, 2kB of RAM, and runs at 16 Mhz. \ No newline at end of file