diff options
author | Lu Yahan <yahan@iscas.ac.cn> | 2022-02-21 06:25:32 +0300 |
---|---|---|
committer | Node.js GitHub Bot <github-bot@iojs.org> | 2022-02-25 18:28:38 +0300 |
commit | 2f7920c2088f0e513d3ab848901d297dc47caa50 (patch) | |
tree | 1ca2372745f33ac4a65bb20b08abbba02471a671 /deps | |
parent | 92d6c40ae88a99759809f7d7763f0e5a6dc3ac0d (diff) |
deps: V8: cherry-pick 77d515484864
Original commit message:
[riscv64] Move explicit specialization into .cc file
Building with Gcc-10 causes error "explicit specialization in non-namespace scope".
This change fixes it.
Bug: v8:12649
Change-Id: I36b2b042b336c2dfd32ba5541fdbbdb8dc8b4fd7
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3473997
Reviewed-by: ji qiu <qiuji@iscas.ac.cn>
Commit-Queue: ji qiu <qiuji@iscas.ac.cn>
Cr-Commit-Position: refs/heads/main@{#79185}
Refs: https://github.com/v8/v8/commit/77d515484864984f721d6726610f314982ac44d2
PR-URL: https://github.com/nodejs/node/pull/42067
Refs: https://github.com/v8/v8/commit/b66334313c8bd73b253d0779f59f3e8656967043
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Mary Marchini <oss@mmarchini.me>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Stewart X Addison <sxa@redhat.com>
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/src/execution/riscv64/simulator-riscv64.cc | 158 | ||||
-rw-r--r-- | deps/v8/src/execution/riscv64/simulator-riscv64.h | 158 |
2 files changed, 158 insertions, 158 deletions
diff --git a/deps/v8/src/execution/riscv64/simulator-riscv64.cc b/deps/v8/src/execution/riscv64/simulator-riscv64.cc index 479c4b6a2fc..5b45f0a36da 100644 --- a/deps/v8/src/execution/riscv64/simulator-riscv64.cc +++ b/deps/v8/src/execution/riscv64/simulator-riscv64.cc @@ -127,6 +127,164 @@ static inline bool is_overlapped_widen(const int astart, int asize, #define require_align(val, pos) CHECK_EQ(is_aligned(val, pos), true) #endif +// RVV +// The following code about RVV was based from: +// https://github.com/riscv/riscv-isa-sim +// Copyright (c) 2010-2017, The Regents of the University of California +// (Regents). All Rights Reserved. + +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// 3. Neither the name of the Regents nor the +// names of its contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. + +// IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, +// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +// REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED +// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED +// HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE +// MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +template <uint64_t N> +struct type_usew_t; +template <> +struct type_usew_t<8> { + using type = uint8_t; +}; + +template <> +struct type_usew_t<16> { + using type = uint16_t; +}; + +template <> +struct type_usew_t<32> { + using type = uint32_t; +}; + +template <> +struct type_usew_t<64> { + using type = uint64_t; +}; + +template <> +struct type_usew_t<128> { + using type = __uint128_t; +}; +template <uint64_t N> +struct type_sew_t; + +template <> +struct type_sew_t<8> { + using type = int8_t; +}; + +template <> +struct type_sew_t<16> { + using type = int16_t; +}; + +template <> +struct type_sew_t<32> { + using type = int32_t; +}; + +template <> +struct type_sew_t<64> { + using type = int64_t; +}; + +template <> +struct type_sew_t<128> { + using type = __int128_t; +}; + +#define VV_PARAMS(x) \ + type_sew_t<x>::type& vd = \ + Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + type_sew_t<x>::type vs1 = Rvvelt<type_sew_t<x>::type>(rvv_vs1_reg(), i); \ + type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); + +#define VV_UPARAMS(x) \ + type_usew_t<x>::type& vd = \ + Rvvelt<type_usew_t<x>::type>(rvv_vd_reg(), i, true); \ + type_usew_t<x>::type vs1 = Rvvelt<type_usew_t<x>::type>(rvv_vs1_reg(), i); \ + type_usew_t<x>::type vs2 = Rvvelt<type_usew_t<x>::type>(rvv_vs2_reg(), i); + +#define VX_PARAMS(x) \ + type_sew_t<x>::type& vd = \ + Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + type_sew_t<x>::type rs1 = (type_sew_t<x>::type)(get_register(rs1_reg())); \ + type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); + +#define VX_UPARAMS(x) \ + type_usew_t<x>::type& vd = \ + Rvvelt<type_usew_t<x>::type>(rvv_vd_reg(), i, true); \ + type_usew_t<x>::type rs1 = (type_usew_t<x>::type)(get_register(rs1_reg())); \ + type_usew_t<x>::type vs2 = Rvvelt<type_usew_t<x>::type>(rvv_vs2_reg(), i); + +#define VI_PARAMS(x) \ + type_sew_t<x>::type& vd = \ + Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + type_sew_t<x>::type simm5 = (type_sew_t<x>::type)(instr_.RvvSimm5()); \ + type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); + +#define VI_UPARAMS(x) \ + type_usew_t<x>::type& vd = \ + Rvvelt<type_usew_t<x>::type>(rvv_vd_reg(), i, true); \ + type_usew_t<x>::type uimm5 = (type_usew_t<x>::type)(instr_.RvvUimm5()); \ + type_usew_t<x>::type vs2 = Rvvelt<type_usew_t<x>::type>(rvv_vs2_reg(), i); + +#define VN_PARAMS(x) \ + constexpr int half_x = x >> 1; \ + type_sew_t<half_x>::type& vd = \ + Rvvelt<type_sew_t<half_x>::type>(rvv_vd_reg(), i, true); \ + type_sew_t<x>::type uimm5 = (type_sew_t<x>::type)(instr_.RvvUimm5()); \ + type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); + +#define VN_UPARAMS(x) \ + constexpr int half_x = x >> 1; \ + type_usew_t<half_x>::type& vd = \ + Rvvelt<type_usew_t<half_x>::type>(rvv_vd_reg(), i, true); \ + type_usew_t<x>::type uimm5 = (type_usew_t<x>::type)(instr_.RvvUimm5()); \ + type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); + +#define VXI_PARAMS(x) \ + type_sew_t<x>::type& vd = \ + Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + type_sew_t<x>::type vs1 = Rvvelt<type_sew_t<x>::type>(rvv_vs1_reg(), i); \ + type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); \ + type_sew_t<x>::type rs1 = (type_sew_t<x>::type)(get_register(rs1_reg())); \ + type_sew_t<x>::type simm5 = (type_sew_t<x>::type)(instr_.RvvSimm5()); + +#define VI_XI_SLIDEDOWN_PARAMS(x, off) \ + auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + auto vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i + off); + +#define VI_XI_SLIDEUP_PARAMS(x, offset) \ + auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + auto vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i - offset); + +/* Vector Integer Extension */ +#define VI_VIE_PARAMS(x, scale) \ + if ((x / scale) < 8) UNREACHABLE(); \ + auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + auto vs2 = Rvvelt<type_sew_t<x / scale>::type>(rvv_vs2_reg(), i); + +#define VI_VIE_UPARAMS(x, scale) \ + if ((x / scale) < 8) UNREACHABLE(); \ + auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ + auto vs2 = Rvvelt<type_usew_t<x / scale>::type>(rvv_vs2_reg(), i); + #define require_noover(astart, asize, bstart, bsize) \ CHECK_EQ(!is_overlapped(astart, asize, bstart, bsize), true) #define require_noover_widen(astart, asize, bstart, bsize) \ diff --git a/deps/v8/src/execution/riscv64/simulator-riscv64.h b/deps/v8/src/execution/riscv64/simulator-riscv64.h index 4d2cd460c4b..bf1dda48e9d 100644 --- a/deps/v8/src/execution/riscv64/simulator-riscv64.h +++ b/deps/v8/src/execution/riscv64/simulator-riscv64.h @@ -652,164 +652,6 @@ class Simulator : public SimulatorBase { } } - // RVV - // The following code about RVV was based from: - // https://github.com/riscv/riscv-isa-sim - // Copyright (c) 2010-2017, The Regents of the University of California - // (Regents). All Rights Reserved. - - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions are met: - // 1. Redistributions of source code must retain the above copyright - // notice, this list of conditions and the following disclaimer. - // 2. Redistributions in binary form must reproduce the above copyright - // notice, this list of conditions and the following disclaimer in the - // documentation and/or other materials provided with the distribution. - // 3. Neither the name of the Regents nor the - // names of its contributors may be used to endorse or promote products - // derived from this software without specific prior written permission. - - // IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, - // SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, - // ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF - // REGENTS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - // REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED - // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - // PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED - // HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE - // MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - template <uint64_t N> - struct type_usew_t; - template <> - struct type_usew_t<8> { - using type = uint8_t; - }; - - template <> - struct type_usew_t<16> { - using type = uint16_t; - }; - - template <> - struct type_usew_t<32> { - using type = uint32_t; - }; - - template <> - struct type_usew_t<64> { - using type = uint64_t; - }; - - template <> - struct type_usew_t<128> { - using type = __uint128_t; - }; - template <uint64_t N> - struct type_sew_t; - - template <> - struct type_sew_t<8> { - using type = int8_t; - }; - - template <> - struct type_sew_t<16> { - using type = int16_t; - }; - - template <> - struct type_sew_t<32> { - using type = int32_t; - }; - - template <> - struct type_sew_t<64> { - using type = int64_t; - }; - - template <> - struct type_sew_t<128> { - using type = __int128_t; - }; - -#define VV_PARAMS(x) \ - type_sew_t<x>::type& vd = \ - Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - type_sew_t<x>::type vs1 = Rvvelt<type_sew_t<x>::type>(rvv_vs1_reg(), i); \ - type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); - -#define VV_UPARAMS(x) \ - type_usew_t<x>::type& vd = \ - Rvvelt<type_usew_t<x>::type>(rvv_vd_reg(), i, true); \ - type_usew_t<x>::type vs1 = Rvvelt<type_usew_t<x>::type>(rvv_vs1_reg(), i); \ - type_usew_t<x>::type vs2 = Rvvelt<type_usew_t<x>::type>(rvv_vs2_reg(), i); - -#define VX_PARAMS(x) \ - type_sew_t<x>::type& vd = \ - Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - type_sew_t<x>::type rs1 = (type_sew_t<x>::type)(get_register(rs1_reg())); \ - type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); - -#define VX_UPARAMS(x) \ - type_usew_t<x>::type& vd = \ - Rvvelt<type_usew_t<x>::type>(rvv_vd_reg(), i, true); \ - type_usew_t<x>::type rs1 = (type_usew_t<x>::type)(get_register(rs1_reg())); \ - type_usew_t<x>::type vs2 = Rvvelt<type_usew_t<x>::type>(rvv_vs2_reg(), i); - -#define VI_PARAMS(x) \ - type_sew_t<x>::type& vd = \ - Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - type_sew_t<x>::type simm5 = (type_sew_t<x>::type)(instr_.RvvSimm5()); \ - type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); - -#define VI_UPARAMS(x) \ - type_usew_t<x>::type& vd = \ - Rvvelt<type_usew_t<x>::type>(rvv_vd_reg(), i, true); \ - type_usew_t<x>::type uimm5 = (type_usew_t<x>::type)(instr_.RvvUimm5()); \ - type_usew_t<x>::type vs2 = Rvvelt<type_usew_t<x>::type>(rvv_vs2_reg(), i); - -#define VN_PARAMS(x) \ - constexpr int half_x = x >> 1; \ - type_sew_t<half_x>::type& vd = \ - Rvvelt<type_sew_t<half_x>::type>(rvv_vd_reg(), i, true); \ - type_sew_t<x>::type uimm5 = (type_sew_t<x>::type)(instr_.RvvUimm5()); \ - type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); - -#define VN_UPARAMS(x) \ - constexpr int half_x = x >> 1; \ - type_usew_t<half_x>::type& vd = \ - Rvvelt<type_usew_t<half_x>::type>(rvv_vd_reg(), i, true); \ - type_usew_t<x>::type uimm5 = (type_usew_t<x>::type)(instr_.RvvUimm5()); \ - type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); - -#define VXI_PARAMS(x) \ - type_sew_t<x>::type& vd = \ - Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - type_sew_t<x>::type vs1 = Rvvelt<type_sew_t<x>::type>(rvv_vs1_reg(), i); \ - type_sew_t<x>::type vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i); \ - type_sew_t<x>::type rs1 = (type_sew_t<x>::type)(get_register(rs1_reg())); \ - type_sew_t<x>::type simm5 = (type_sew_t<x>::type)(instr_.RvvSimm5()); - -#define VI_XI_SLIDEDOWN_PARAMS(x, off) \ - auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - auto vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i + off); - -#define VI_XI_SLIDEUP_PARAMS(x, offset) \ - auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - auto vs2 = Rvvelt<type_sew_t<x>::type>(rvv_vs2_reg(), i - offset); - -/* Vector Integer Extension */ -#define VI_VIE_PARAMS(x, scale) \ - if ((x / scale) < 8) UNREACHABLE(); \ - auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - auto vs2 = Rvvelt<type_sew_t<x / scale>::type>(rvv_vs2_reg(), i); - -#define VI_VIE_UPARAMS(x, scale) \ - if ((x / scale) < 8) UNREACHABLE(); \ - auto& vd = Rvvelt<type_sew_t<x>::type>(rvv_vd_reg(), i, true); \ - auto vs2 = Rvvelt<type_usew_t<x / scale>::type>(rvv_vs2_reg(), i); - inline void rvv_trace_vd() { if (::v8::internal::FLAG_trace_sim) { __int128_t value = Vregister_[rvv_vd_reg()]; |