// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// -build math_big_pure_go riscv64

package big

func mulWW(x, y Word) (z1, z0 Word) {
	return mulWW_g(x, y)
}

func divWW(x1, x0, y Word) (q, r Word) {
	return divWW_g(x1, x0, y)
}

func addVV(z, x, y []Word) (c Word) {
	return addVV_g(z, x, y)
}

func subVV(z, x, y []Word) (c Word) {
	return subVV_g(z, x, y)
}

func addVW(z, x []Word, y Word) (c Word) {
	// TODO: remove indirect function call when golang.org/issue/30548 is fixed
	fn := addVW_g
	if len(z) > 32 {
		fn = addVWlarge
	}
	return fn(z, x, y)
}

func subVW(z, x []Word, y Word) (c Word) {
	// TODO: remove indirect function call when golang.org/issue/30548 is fixed
	fn := subVW_g
	if len(z) > 32 {
		fn = subVWlarge
	}
	return fn(z, x, y)
}

func shlVU(z, x []Word, s uint) (c Word) {
	return shlVU_g(z, x, s)
}

func shrVU(z, x []Word, s uint) (c Word) {
	return shrVU_g(z, x, s)
}

func mulAddVWW(z, x []Word, y, r Word) (c Word) {
	return mulAddVWW_g(z, x, y, r)
}

func addMulVVW(z, x []Word, y Word) (c Word) {
	return addMulVVW_g(z, x, y)
}

func divWVW(z []Word, xn Word, x []Word, y Word) (r Word) {
	return divWVW_g(z, xn, x, y)
}
