mini-llvm 0.1.0
Loading...
Searching...
No Matches
Sub.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2
3#pragma once
4
5#include <bit>
6#include <concepts>
7#include <type_traits>
8
9namespace mini_llvm::ops {
10
11struct Sub {
12 template <typename T>
13 requires std::integral<T>
14 T operator()(T x, T y) const noexcept {
15 return
16 std::bit_cast<T>(
17 static_cast<std::make_unsigned_t<T>>(
18 std::bit_cast<std::make_unsigned_t<T>>(x) - std::bit_cast<std::make_unsigned_t<T>>(y)));
19 }
20
21 bool operator()(bool x, bool y) const noexcept {
22 return x != y;
23 }
24};
25
26} // namespace mini_llvm::ops
Definition Add.h:9
Definition Sub.h:11
bool operator()(bool x, bool y) const noexcept
Definition Sub.h:21
T operator()(T x, T y) const noexcept
Definition Sub.h:14