furiosa_visa_std/vector_engine/op/
has_alu.rs

1//! HasAlu trait for ops that provide ALU information.
2
3use super::{
4    ClipBinaryOpF32, ClipBinaryOpI32, ClipOpF, ClipOpI, FpBinaryOp, FpDivBinaryOp, FpDivOp, FpTernaryOp, FpUnaryOp,
5    FxpBinaryOp, FxpOp, LogicBinaryOpF32, LogicBinaryOpI32, LogicOpF, LogicOpI,
6};
7use crate::vector_engine::alu::RngdAlu;
8
9/// Trait for ops that provide ALU information.
10pub trait HasAlu {
11    /// Returns the ALU this operation uses.
12    fn alu(&self) -> RngdAlu;
13}
14
15// ============================================================================
16// HasAlu implementations
17// ============================================================================
18
19impl HasAlu for LogicBinaryOpI32 {
20    fn alu(&self) -> RngdAlu {
21        LogicBinaryOpI32::alu(self)
22    }
23}
24
25impl HasAlu for LogicBinaryOpF32 {
26    fn alu(&self) -> RngdAlu {
27        LogicBinaryOpF32::alu(self)
28    }
29}
30
31impl HasAlu for FxpBinaryOp {
32    fn alu(&self) -> RngdAlu {
33        FxpBinaryOp::alu(self)
34    }
35}
36
37impl HasAlu for FpUnaryOp {
38    fn alu(&self) -> RngdAlu {
39        FpUnaryOp::alu(self)
40    }
41}
42
43impl HasAlu for FpBinaryOp {
44    fn alu(&self) -> RngdAlu {
45        FpBinaryOp::alu(self)
46    }
47}
48
49impl HasAlu for FpTernaryOp {
50    fn alu(&self) -> RngdAlu {
51        FpTernaryOp::alu(self)
52    }
53}
54
55impl HasAlu for FpDivBinaryOp {
56    fn alu(&self) -> RngdAlu {
57        FpDivBinaryOp::alu(self)
58    }
59}
60
61impl HasAlu for FpDivOp {
62    fn alu(&self) -> RngdAlu {
63        self.op.alu()
64    }
65}
66
67impl HasAlu for ClipBinaryOpI32 {
68    fn alu(&self) -> RngdAlu {
69        ClipBinaryOpI32::alu(self)
70    }
71}
72
73impl HasAlu for ClipBinaryOpF32 {
74    fn alu(&self) -> RngdAlu {
75        ClipBinaryOpF32::alu(self)
76    }
77}
78
79// HasAlu implementations for "with mode" types
80impl HasAlu for FxpOp {
81    fn alu(&self) -> RngdAlu {
82        self.op.alu()
83    }
84}
85
86impl HasAlu for LogicOpI {
87    fn alu(&self) -> RngdAlu {
88        self.op.alu()
89    }
90}
91
92impl HasAlu for LogicOpF {
93    fn alu(&self) -> RngdAlu {
94        self.op.alu()
95    }
96}
97
98impl HasAlu for ClipOpI {
99    fn alu(&self) -> RngdAlu {
100        self.op.alu()
101    }
102}
103
104impl HasAlu for ClipOpF {
105    fn alu(&self) -> RngdAlu {
106        self.op.alu()
107    }
108}