Browse Source
Merge pull request #2134 from sizn-sc/zaamo-zalrsc
Gate Zaamo,Zalrsc instructions behind corresponding extensions, not M…
pull/2137/head
Andrew Waterman
9 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with
24 additions and
25 deletions
-
riscv/insns/amoadd_d.h
-
riscv/insns/amoadd_w.h
-
riscv/insns/amoand_d.h
-
riscv/insns/amoand_w.h
-
riscv/insns/amomax_d.h
-
riscv/insns/amomax_w.h
-
riscv/insns/amomaxu_d.h
-
riscv/insns/amomaxu_w.h
-
riscv/insns/amomin_d.h
-
riscv/insns/amomin_w.h
-
riscv/insns/amominu_d.h
-
riscv/insns/amominu_w.h
-
riscv/insns/amoor_d.h
-
riscv/insns/amoor_w.h
-
riscv/insns/amoswap_d.h
-
riscv/insns/amoswap_w.h
-
riscv/insns/amoxor_d.h
-
riscv/insns/amoxor_w.h
-
riscv/insns/lr_d.h
-
riscv/insns/lr_w.h
-
riscv/insns/sc_d.h
-
riscv/insns/sc_w.h
-
riscv/insns/ssamoswap_d.h
-
riscv/insns/ssamoswap_w.h
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](uint64_t lhs) { return lhs + RS2; })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](uint32_t lhs) { return lhs + RS2; }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](uint64_t lhs) { return lhs & RS2; })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](uint32_t lhs) { return lhs & RS2; }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](int64_t lhs) { return std::max(lhs, int64_t(RS2)); })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](int32_t lhs) { return std::max(lhs, int32_t(RS2)); }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](uint64_t lhs) { return std::max(lhs, RS2); })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](uint32_t lhs) { return std::max(lhs, uint32_t(RS2)); }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](int64_t lhs) { return std::min(lhs, int64_t(RS2)); })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](int32_t lhs) { return std::min(lhs, int32_t(RS2)); }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](uint64_t lhs) { return std::min(lhs, RS2); })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](uint32_t lhs) { return std::min(lhs, uint32_t(RS2)); }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](uint64_t lhs) { return lhs | RS2; })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](uint32_t lhs) { return lhs | RS2; }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](uint64_t UNUSED lhs) { return RS2; })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](uint32_t UNUSED lhs) { return RS2; }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.amo<uint64_t>(RS1, [&](uint64_t lhs) { return lhs ^ RS2; })); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
WRITE_RD(sext32(MMU.amo<uint32_t>(RS1, [&](uint32_t lhs) { return lhs ^ RS2; }))); |
|
|
|
|
|
|
|
@ -1,3 +1,3 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZALRSC); |
|
|
|
require_rv64; |
|
|
|
WRITE_RD(MMU.load_reserved<int64_t>(RS1)); |
|
|
|
|
|
|
|
@ -1,2 +1,2 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZALRSC); |
|
|
|
WRITE_RD(MMU.load_reserved<int32_t>(RS1)); |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZALRSC); |
|
|
|
require_rv64; |
|
|
|
|
|
|
|
bool have_reservation = MMU.store_conditional<uint64_t>(RS1, RS2); |
|
|
|
|
|
|
|
@ -1,4 +1,4 @@ |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZALRSC); |
|
|
|
|
|
|
|
bool have_reservation = MMU.store_conditional<uint32_t>(RS1, RS2); |
|
|
|
|
|
|
|
|
|
|
|
@ -1,5 +1,5 @@ |
|
|
|
require_extension(EXT_ZICFISS); |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
require_rv64; |
|
|
|
|
|
|
|
DECLARE_XENVCFG_VARS(SSE); |
|
|
|
|
|
|
|
@ -1,7 +1,6 @@ |
|
|
|
require_extension(EXT_ZICFISS); |
|
|
|
require_extension('A'); |
|
|
|
require_extension(EXT_ZAAMO); |
|
|
|
|
|
|
|
DECLARE_XENVCFG_VARS(SSE); |
|
|
|
require_envcfg(SSE); |
|
|
|
WRITE_RD(sext32(MMU.ssamoswap<uint32_t>(RS1, RS2))); |
|
|
|
|
|
|
|
|