// Code generated by modernc.org/undup from the per-target sqlite_*.go files; DO NOT EDIT.

//go:build (darwin && amd64) || (darwin && arm64) || (freebsd && 386) || (freebsd && arm) || (linux && 386) || (linux && amd64) || (linux && arm) || (linux && arm64) || (linux && loong64) || (linux && ppc64le) || (linux && riscv64) || (linux && s390x) || (netbsd && amd64) || (openbsd && amd64) || (openbsd && arm64) || (windows && (amd64 || arm64)) || (windows && 386)

package sqlite3

import (
	"modernc.org/libc"
)

const SIG_ATOMIC_MAX = 2147483647

const SIG_ATOMIC_MIN = -2147483648

// C documentation
//
//	/*
//	** Two inputs are multiplied to get a 128-bit result.  Write the
//	** lower 64-bits of the result into *pLo, and return the high-order
//	** 64 bits.
//	*/
func _sqlite3Multiply128(tls *libc.TLS, a Tu64, b Tu64, pLo uintptr) (r Tu64) {
	var a0, a0b0, a0b1, a1, a1b0, a1b1, b0, b1, t Tu64
	_, _, _, _, _, _, _, _, _ = a0, a0b0, a0b1, a1, a1b0, a1b1, b0, b1, t
	a0 = uint64(uint32(a))
	a1 = a >> int32(32)
	b0 = uint64(uint32(b))
	b1 = b >> int32(32)
	a0b0 = a0 * b0
	a1b1 = a1 * b1
	a0b1 = a0 * b1
	a1b0 = a1 * b0
	t = a0b0>>libc.Int32FromInt32(32) + uint64(uint32(a0b1)) + uint64(uint32(a1b0))
	**(**Tu64)(__ccgo_up(pLo)) = a0b0&uint64(0xffffffff) | t<<libc.Int32FromInt32(32)
	return a1b1 + a0b1>>libc.Int32FromInt32(32) + a1b0>>libc.Int32FromInt32(32) + t>>libc.Int32FromInt32(32)
}
