[flang-commits] [flang] [llvm] [flang][PPC] Implement ieee_set_status and ieee_get_status for AIX (PR #215618)
Daniel Chen via flang-commits
flang-commits at lists.llvm.org
Tue Aug 11 10:55:32 PDT 2026
================
@@ -5210,11 +5210,81 @@ template <bool isGet, bool isModes>
void IntrinsicLibrary::genIeeeGetOrSetModesOrStatus(
llvm::ArrayRef<fir::ExtendedValue> args) {
assert(args.size() == 1);
+ if constexpr (!isModes) {
+ llvm::Triple triple = fir::getTargetTriple(builder.getModule());
+ mlir::Type i32Ty = builder.getIntegerType(32);
+ mlir::Type i32PtrTy = builder.getRefType(i32Ty);
+ if (triple.isOSAIX()) {
+ // On AIX, fegetenv/fesetenv does not round-trip the FPSCR trap-enable
+ // bits [7:3].
+ //
+ // ieee_status_type.__data layout:
+ // bytes [0, 20) - fenv_t saved by fegetenv / restored by fesetenv
+ // bytes [20, 28) - raw FPSCR double from mffs (trap-enable bits [7:3])
+ static constexpr int kAIXFenvTSize = 20; // sizeof(fenv_t) on AIX
----------------
DanielCChen wrote:
Instead of hardcode the value, shall we inquire the runtime
```
size_t RTNAME(GetFenvTSize)(void) { return sizeof(fenv_t); }
```
https://github.com/llvm/llvm-project/pull/215618
More information about the flang-commits
mailing list