We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I'm writing embedded code for the Cortex-M4 using ARM GCC 11.2.1, and wish to call the SMLAxy instruction from C code. Ideally, I'd like to do this with built-in functions like:
int res0 = __builtin_arm_smlabb(a, b, c); int res1 = __builtin_arm_smlatt(a, b, c); int res2 = __builtin_arm_smlatb(a, b, c); int res3 = __builtin_arm_smlabt(a, b, c); // does not exist
The first three of these lines compile correctly. However, the last one (__builtin_arm_smlabt) throws an error saying the built in function is not defined. I'm compiling with the flag "-mcpu=cortex-m4" and no other flags. I know I can just switch the order of the arguments and call "__builtin_arm_smlatb" (or use inline assembly), but is there a reason why SMLABT specifically does not have a builtin, while its variants do?
On a similar note, I'd also like to call the SMULxy instruction the same way. However, "__builtin_arm_smultt" does not exist, nor do any of its other permutations. Why is this the case?
FWIW, on Arm 32-bit Clang, all eight permutations of __builtin_arm_smlaXY and __builtin_arm_smulXY exist.
Thanks!