Intrinsic module procedures ieee_get_modes, ieee_set_modes, ieee_get_status, and ieee_set_status store and retrieve opaque data values whose size varies by machine and OS environment. These data values are usually, but not always small. Their sizes are not directly known in a cross compilation environment. Address this issue by implementing two mechanisms for processing these data values. Environments that use typical small data sizes can access storage defined at compile time. When this is not valid, data storage of any size can be allocated at runtime.
42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
//===-- Exceptions.h --------------------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef FORTRAN_OPTIMIZER_BUILDER_RUNTIME_EXCEPTIONS_H
|
|
#define FORTRAN_OPTIMIZER_BUILDER_RUNTIME_EXCEPTIONS_H
|
|
|
|
#include "mlir/IR/Value.h"
|
|
|
|
namespace mlir {
|
|
class Location;
|
|
} // namespace mlir
|
|
|
|
namespace fir {
|
|
class FirOpBuilder;
|
|
}
|
|
|
|
namespace fir::runtime {
|
|
|
|
/// Generate a runtime call to map a set of ieee_flag_type exceptions to a
|
|
/// libm fenv.h excepts value.
|
|
mlir::Value genMapExcept(fir::FirOpBuilder &builder, mlir::Location loc,
|
|
mlir::Value excepts);
|
|
|
|
mlir::Value genSupportHalting(fir::FirOpBuilder &builder, mlir::Location loc,
|
|
mlir::Value excepts);
|
|
|
|
mlir::Value genGetUnderflowMode(fir::FirOpBuilder &builder, mlir::Location loc);
|
|
void genSetUnderflowMode(fir::FirOpBuilder &builder, mlir::Location loc,
|
|
mlir::Value bit);
|
|
|
|
mlir::Value genGetModesTypeSize(fir::FirOpBuilder &builder, mlir::Location loc);
|
|
mlir::Value genGetStatusTypeSize(fir::FirOpBuilder &builder,
|
|
mlir::Location loc);
|
|
|
|
} // namespace fir::runtime
|
|
#endif // FORTRAN_OPTIMIZER_BUILDER_RUNTIME_EXCEPTIONS_H
|