[clang] [clang][AVR] Add AVR-specific builtin functions (PR #203214)

via cfe-commits cfe-commits at lists.llvm.org
Sun Jun 14 10:51:23 PDT 2026


================
@@ -564,4 +585,19 @@ void AVRTargetInfo::getTargetDefines(const LangOptions &Opts,
     Builder.defineMacro("__flash4", "__attribute__((__address_space__(5)))");
   if (NumFlashBanks >= 6)
     Builder.defineMacro("__flash5", "__attribute__((__address_space__(6)))");
+
+  // Define macros for builtins
+  Builder.defineMacro("__BUILTIN_AVR_NOP", "1");
+  Builder.defineMacro("__BUILTIN_AVR_SEI", "1");
+  Builder.defineMacro("__BUILTIN_AVR_CLI", "1");
+  Builder.defineMacro("__BUILTIN_AVR_WDR", "1");
+  Builder.defineMacro("__BUILTIN_AVR_SLEEP", "1");
+  Builder.defineMacro("__BUILTIN_AVR_SWAP", "1");
+  Builder.defineMacro("__BUILTIN_AVR_FMUL", "1");
+  Builder.defineMacro("__BUILTIN_AVR_FMULS", "1");
+  Builder.defineMacro("__BUILTIN_AVR_FMULSU", "1");
+  Builder.defineMacro("__BUILTIN_AVR_DELAY_CYCLES", "1");
----------------
beakthoven wrote:

Yes, these are unconditionally defined in avr-gcc but they silently switch to lib calls for AVR tiny devices.

```
$ avr-gcc -mmcu=attiny13 -dM -E - < /dev/null | grep BUILTIN_AVR_FMUL

#define __BUILTIN_AVR_FMULSU 1
#define __BUILTIN_AVR_FMULS 1
#define __BUILTIN_AVR_FMUL 1
```

https://github.com/llvm/llvm-project/pull/203214


More information about the cfe-commits mailing list