mirror of
https://github.com/rdolbeau/VexRiscvBPluginGenerator.git
synced 2025-04-16 09:44:41 -04:00
82 lines
6.7 KiB
Text
82 lines
6.7 KiB
Text
I CLMUL CLMUL 0000101----------001-----0110011 clmul Zbc Zbkc
|
|
I CLMULRH CLMULRH 0000101----------01------0110011 clmul Zbc Zbkc
|
|
|
|
S CLMUL "fun_clmul(input(SRC1),input(SRC2))"
|
|
S CLMULRH "fun_clmulrh(input(SRC1),input(SRC2), input(INSTRUCTION)(12))"
|
|
|
|
|
|
P """
|
|
def fun_clmul(rs1:Bits, rs2:Bits) : Bits = {
|
|
val x0 = (((rs2 & B"32'x00000001") =/= B"32'x00000000") ? (rs1 |<< 0) | (B"32'x00000000"))
|
|
val x1 = (((rs2 & B"32'x00000002") =/= B"32'x00000000") ? (rs1 |<< 1) | (B"32'x00000000"))
|
|
val x2 = (((rs2 & B"32'x00000004") =/= B"32'x00000000") ? (rs1 |<< 2) | (B"32'x00000000"))
|
|
val x3 = (((rs2 & B"32'x00000008") =/= B"32'x00000000") ? (rs1 |<< 3) | (B"32'x00000000"))
|
|
val x4 = (((rs2 & B"32'x00000010") =/= B"32'x00000000") ? (rs1 |<< 4) | (B"32'x00000000"))
|
|
val x5 = (((rs2 & B"32'x00000020") =/= B"32'x00000000") ? (rs1 |<< 5) | (B"32'x00000000"))
|
|
val x6 = (((rs2 & B"32'x00000040") =/= B"32'x00000000") ? (rs1 |<< 6) | (B"32'x00000000"))
|
|
val x7 = (((rs2 & B"32'x00000080") =/= B"32'x00000000") ? (rs1 |<< 7) | (B"32'x00000000"))
|
|
val x8 = (((rs2 & B"32'x00000100") =/= B"32'x00000000") ? (rs1 |<< 8) | (B"32'x00000000"))
|
|
val x9 = (((rs2 & B"32'x00000200") =/= B"32'x00000000") ? (rs1 |<< 9) | (B"32'x00000000"))
|
|
val x10 = (((rs2 & B"32'x00000400") =/= B"32'x00000000") ? (rs1 |<< 10) | (B"32'x00000000"))
|
|
val x11 = (((rs2 & B"32'x00000800") =/= B"32'x00000000") ? (rs1 |<< 11) | (B"32'x00000000"))
|
|
val x12 = (((rs2 & B"32'x00001000") =/= B"32'x00000000") ? (rs1 |<< 12) | (B"32'x00000000"))
|
|
val x13 = (((rs2 & B"32'x00002000") =/= B"32'x00000000") ? (rs1 |<< 13) | (B"32'x00000000"))
|
|
val x14 = (((rs2 & B"32'x00004000") =/= B"32'x00000000") ? (rs1 |<< 14) | (B"32'x00000000"))
|
|
val x15 = (((rs2 & B"32'x00008000") =/= B"32'x00000000") ? (rs1 |<< 15) | (B"32'x00000000"))
|
|
val x16 = (((rs2 & B"32'x00010000") =/= B"32'x00000000") ? (rs1 |<< 16) | (B"32'x00000000"))
|
|
val x17 = (((rs2 & B"32'x00020000") =/= B"32'x00000000") ? (rs1 |<< 17) | (B"32'x00000000"))
|
|
val x18 = (((rs2 & B"32'x00040000") =/= B"32'x00000000") ? (rs1 |<< 18) | (B"32'x00000000"))
|
|
val x19 = (((rs2 & B"32'x00080000") =/= B"32'x00000000") ? (rs1 |<< 19) | (B"32'x00000000"))
|
|
val x20 = (((rs2 & B"32'x00100000") =/= B"32'x00000000") ? (rs1 |<< 20) | (B"32'x00000000"))
|
|
val x21 = (((rs2 & B"32'x00200000") =/= B"32'x00000000") ? (rs1 |<< 21) | (B"32'x00000000"))
|
|
val x22 = (((rs2 & B"32'x00400000") =/= B"32'x00000000") ? (rs1 |<< 22) | (B"32'x00000000"))
|
|
val x23 = (((rs2 & B"32'x00800000") =/= B"32'x00000000") ? (rs1 |<< 23) | (B"32'x00000000"))
|
|
val x24 = (((rs2 & B"32'x01000000") =/= B"32'x00000000") ? (rs1 |<< 24) | (B"32'x00000000"))
|
|
val x25 = (((rs2 & B"32'x02000000") =/= B"32'x00000000") ? (rs1 |<< 25) | (B"32'x00000000"))
|
|
val x26 = (((rs2 & B"32'x04000000") =/= B"32'x00000000") ? (rs1 |<< 26) | (B"32'x00000000"))
|
|
val x27 = (((rs2 & B"32'x08000000") =/= B"32'x00000000") ? (rs1 |<< 27) | (B"32'x00000000"))
|
|
val x28 = (((rs2 & B"32'x10000000") =/= B"32'x00000000") ? (rs1 |<< 28) | (B"32'x00000000"))
|
|
val x29 = (((rs2 & B"32'x20000000") =/= B"32'x00000000") ? (rs1 |<< 29) | (B"32'x00000000"))
|
|
val x30 = (((rs2 & B"32'x40000000") =/= B"32'x00000000") ? (rs1 |<< 30) | (B"32'x00000000"))
|
|
val x31 = (((rs2 & B"32'x80000000") =/= B"32'x00000000") ? (rs1 |<< 31) | (B"32'x00000000"))
|
|
x0 ^ x1 ^ x2 ^ x3 ^ x4 ^ x5 ^ x6 ^ x7 ^ x8 ^ x9 ^ x10 ^ x11 ^ x12 ^ x13 ^ x14 ^ x15 ^ x16 ^ x17 ^ x18 ^ x19 ^ x20 ^ x21 ^ x22 ^ x23 ^ x24 ^ x25 ^ x26 ^ x27 ^ x28 ^ x29 ^ x30 ^ x31 // return value
|
|
}
|
|
|
|
def fun_clmulrh(rs1:Bits, rs2:Bits, isH: Bool) : Bits = {
|
|
val x0 = (((rs2 & B"32'x00000001") =/= B"32'x00000000") ? (rs1 |>> 31) | (B"32'x00000000"))
|
|
val x1 = (((rs2 & B"32'x00000002") =/= B"32'x00000000") ? (rs1 |>> 30) | (B"32'x00000000"))
|
|
val x2 = (((rs2 & B"32'x00000004") =/= B"32'x00000000") ? (rs1 |>> 29) | (B"32'x00000000"))
|
|
val x3 = (((rs2 & B"32'x00000008") =/= B"32'x00000000") ? (rs1 |>> 28) | (B"32'x00000000"))
|
|
val x4 = (((rs2 & B"32'x00000010") =/= B"32'x00000000") ? (rs1 |>> 27) | (B"32'x00000000"))
|
|
val x5 = (((rs2 & B"32'x00000020") =/= B"32'x00000000") ? (rs1 |>> 26) | (B"32'x00000000"))
|
|
val x6 = (((rs2 & B"32'x00000040") =/= B"32'x00000000") ? (rs1 |>> 25) | (B"32'x00000000"))
|
|
val x7 = (((rs2 & B"32'x00000080") =/= B"32'x00000000") ? (rs1 |>> 24) | (B"32'x00000000"))
|
|
val x8 = (((rs2 & B"32'x00000100") =/= B"32'x00000000") ? (rs1 |>> 23) | (B"32'x00000000"))
|
|
val x9 = (((rs2 & B"32'x00000200") =/= B"32'x00000000") ? (rs1 |>> 22) | (B"32'x00000000"))
|
|
val x10 = (((rs2 & B"32'x00000400") =/= B"32'x00000000") ? (rs1 |>> 21) | (B"32'x00000000"))
|
|
val x11 = (((rs2 & B"32'x00000800") =/= B"32'x00000000") ? (rs1 |>> 20) | (B"32'x00000000"))
|
|
val x12 = (((rs2 & B"32'x00001000") =/= B"32'x00000000") ? (rs1 |>> 19) | (B"32'x00000000"))
|
|
val x13 = (((rs2 & B"32'x00002000") =/= B"32'x00000000") ? (rs1 |>> 18) | (B"32'x00000000"))
|
|
val x14 = (((rs2 & B"32'x00004000") =/= B"32'x00000000") ? (rs1 |>> 17) | (B"32'x00000000"))
|
|
val x15 = (((rs2 & B"32'x00008000") =/= B"32'x00000000") ? (rs1 |>> 16) | (B"32'x00000000"))
|
|
val x16 = (((rs2 & B"32'x00010000") =/= B"32'x00000000") ? (rs1 |>> 15) | (B"32'x00000000"))
|
|
val x17 = (((rs2 & B"32'x00020000") =/= B"32'x00000000") ? (rs1 |>> 14) | (B"32'x00000000"))
|
|
val x18 = (((rs2 & B"32'x00040000") =/= B"32'x00000000") ? (rs1 |>> 13) | (B"32'x00000000"))
|
|
val x19 = (((rs2 & B"32'x00080000") =/= B"32'x00000000") ? (rs1 |>> 12) | (B"32'x00000000"))
|
|
val x20 = (((rs2 & B"32'x00100000") =/= B"32'x00000000") ? (rs1 |>> 11) | (B"32'x00000000"))
|
|
val x21 = (((rs2 & B"32'x00200000") =/= B"32'x00000000") ? (rs1 |>> 10) | (B"32'x00000000"))
|
|
val x22 = (((rs2 & B"32'x00400000") =/= B"32'x00000000") ? (rs1 |>> 9) | (B"32'x00000000"))
|
|
val x23 = (((rs2 & B"32'x00800000") =/= B"32'x00000000") ? (rs1 |>> 8) | (B"32'x00000000"))
|
|
val x24 = (((rs2 & B"32'x01000000") =/= B"32'x00000000") ? (rs1 |>> 7) | (B"32'x00000000"))
|
|
val x25 = (((rs2 & B"32'x02000000") =/= B"32'x00000000") ? (rs1 |>> 6) | (B"32'x00000000"))
|
|
val x26 = (((rs2 & B"32'x04000000") =/= B"32'x00000000") ? (rs1 |>> 5) | (B"32'x00000000"))
|
|
val x27 = (((rs2 & B"32'x08000000") =/= B"32'x00000000") ? (rs1 |>> 4) | (B"32'x00000000"))
|
|
val x28 = (((rs2 & B"32'x10000000") =/= B"32'x00000000") ? (rs1 |>> 3) | (B"32'x00000000"))
|
|
val x29 = (((rs2 & B"32'x20000000") =/= B"32'x00000000") ? (rs1 |>> 2) | (B"32'x00000000"))
|
|
val x30 = (((rs2 & B"32'x40000000") =/= B"32'x00000000") ? (rs1 |>> 1) | (B"32'x00000000"))
|
|
val x31 = (((rs2 & B"32'x80000000") =/= B"32'x00000000") ? (rs1 |>> 0) | (B"32'x00000000"))
|
|
val r = x0 ^ x1 ^ x2 ^ x3 ^ x4 ^ x5 ^ x6 ^ x7 ^ x8 ^ x9 ^ x10 ^ x11 ^ x12 ^ x13 ^ x14 ^ x15 ^ x16 ^ x17 ^ x18 ^ x19 ^ x20 ^ x21 ^ x22 ^ x23 ^ x24 ^ x25 ^ x26 ^ x27 ^ x28 ^ x29 ^ x30 ^ x31
|
|
|
|
isH ? (r |>> 1) | (r) // return value
|
|
}
|
|
"""
|