Skip to content

Commit

Permalink
gtest
Browse files Browse the repository at this point in the history
  • Loading branch information
robehn committed Nov 25, 2024
1 parent ca89d21 commit 808e124
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions test/hotspot/gtest/riscv/test_assembler_riscv.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2020, Red Hat Inc. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/

#include "precompiled.hpp"

#if (defined(RISCV) || defined(RISCV64)) && !defined(ZERO)

#include "asm/assembler.inline.hpp"
#include "asm/macroAssembler.hpp"
#include "memory/resourceArea.hpp"
#include "unittest.hpp"

typedef uint64_t (*zicond_eq)(int64_t cmp1, int64_t cmp2, int64_t dst, int64_t src);

class CmovTester {
public:
template <typename FUNC>
static void test(FUNC &f) {
BufferBlob* bb = BufferBlob::create("riscvTest", 500000);
CodeBuffer code(bb);
MacroAssembler _masm(&code);
f(_masm);
BufferBlob::free(bb);
}
};

static void cmov_eq_true(MacroAssembler& _masm) {
#define __ _masm.
address entry = __ pc();
__ cmov_eq(c_rarg0, c_rarg1, c_rarg2, c_rarg3);
__ mv(c_rarg0, c_rarg2);
__ ret();
#undef __
uint64_t ret = ((zicond_eq)entry)(88, 88, 66, 77);
ASSERT_EQ(ret, 77ul);
}

static void cmov_eq_false(MacroAssembler& _masm) {
#define __ _masm.
address entry = __ pc();
__ cmov_eq(c_rarg0, c_rarg1, c_rarg2, c_rarg3);
__ mv(c_rarg0, c_rarg2);
__ ret();
#undef __
uint64_t ret = ((zicond_eq)entry)(88, 87, 66, 77);
ASSERT_EQ(ret, 66ul);
}

TEST_VM(Instruction, Cmov) {
CmovTester::test(cmov_eq_true);
CmovTester::test(cmov_eq_false);
}
#endif // RISCV

0 comments on commit 808e124

Please sign in to comment.