// Copyright 2019 The SwiftShader Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "SpirvShader.hpp"

#include <spirv/unified1/spirv.hpp>

namespace sw {

void SpirvShader::EvalSpecConstantOp(InsnIterator insn)
{
	auto opcode = static_cast<spv::Op>(insn.word(3));

	switch(opcode)
	{
	case spv::OpIAdd:
	case spv::OpISub:
	case spv::OpIMul:
	case spv::OpUDiv:
	case spv::OpSDiv:
	case spv::OpUMod:
	case spv::OpSMod:
	case spv::OpSRem:
	case spv::OpShiftRightLogical:
	case spv::OpShiftRightArithmetic:
	case spv::OpShiftLeftLogical:
	case spv::OpBitwiseOr:
	case spv::OpLogicalOr:
	case spv::OpBitwiseAnd:
	case spv::OpLogicalAnd:
	case spv::OpBitwiseXor:
	case spv::OpLogicalEqual:
	case spv::OpIEqual:
	case spv::OpLogicalNotEqual:
	case spv::OpINotEqual:
	case spv::OpULessThan:
	case spv::OpSLessThan:
	case spv::OpUGreaterThan:
	case spv::OpSGreaterThan:
	case spv::OpULessThanEqual:
	case spv::OpSLessThanEqual:
	case spv::OpUGreaterThanEqual:
	case spv::OpSGreaterThanEqual:
		EvalSpecConstantBinaryOp(insn);
		break;

	case spv::OpSConvert:
	case spv::OpFConvert:
	case spv::OpUConvert:
	case spv::OpSNegate:
	case spv::OpNot:
	case spv::OpLogicalNot:
	case spv::OpQuantizeToF16:
		EvalSpecConstantUnaryOp(insn);
		break;

	case spv::OpSelect:
	{
		auto &result = CreateConstant(insn);
		auto const &cond = getObject(insn.word(4));
		auto condIsScalar = (getType(cond.type).sizeInComponents == 1);
		auto const &left = getObject(insn.word(5));
		auto const &right = getObject(insn.word(6));

		for(auto i = 0u; i < getType(result.type).sizeInComponents; i++)
		{
			auto sel = cond.constantValue[condIsScalar ? 0 : i];
			result.constantValue[i] = sel ? left.constantValue[i] : right.constantValue[i];
		}
		break;
	}

	case spv::OpCompositeExtract:
	{
		auto &result = CreateConstant(insn);
		auto const &compositeObject = getObject(insn.word(4));
		auto firstComponent = WalkLiteralAccessChain(compositeObject.type, insn.wordCount() - 5, insn.wordPointer(5));

		for(auto i = 0u; i < getType(result.type).sizeInComponents; i++)
		{
			result.constantValue[i] = compositeObject.constantValue[firstComponent + i];
		}
		break;
	}

	case spv::OpCompositeInsert:
	{
		auto &result = CreateConstant(insn);
		auto const &newPart = getObject(insn.word(4));
		auto const &oldObject = getObject(insn.word(5));
		auto firstNewComponent = WalkLiteralAccessChain(result.type, insn.wordCount() - 6, insn.wordPointer(6));

		// old components before
		for(auto i = 0u; i < firstNewComponent; i++)
		{
			result.constantValue[i] = oldObject.constantValue[i];
		}
		// new part
		for(auto i = 0u; i < getType(newPart.type).sizeInComponents; i++)
		{
			result.constantValue[firstNewComponent + i] = newPart.constantValue[i];
		}
		// old components after
		for(auto i = firstNewComponent + getType(newPart.type).sizeInComponents; i < getType(result.type).sizeInComponents; i++)
		{
			result.constantValue[i] = oldObject.constantValue[i];
		}
		break;
	}

	case spv::OpVectorShuffle:
	{
		auto &result = CreateConstant(insn);
		auto const &firstHalf = getObject(insn.word(4));
		auto const &secondHalf = getObject(insn.word(5));

		for(auto i = 0u; i < getType(result.type).sizeInComponents; i++)
		{
			auto selector = insn.word(6 + i);
			if(selector == static_cast<uint32_t>(-1))
			{
				// Undefined value, we'll use zero
				result.constantValue[i] = 0;
			}
			else if(selector < getType(firstHalf.type).sizeInComponents)
			{
				result.constantValue[i] = firstHalf.constantValue[selector];
			}
			else
			{
				result.constantValue[i] = secondHalf.constantValue[selector - getType(firstHalf.type).sizeInComponents];
			}
		}
		break;
	}

	default:
		// Other spec constant ops are possible, but require capabilities that are
		// not exposed in our Vulkan implementation (eg Kernel), so we should never
		// get here for correct shaders.
		UNSUPPORTED("EvalSpecConstantOp op: %s", OpcodeName(opcode).c_str());
	}
}

void SpirvShader::EvalSpecConstantUnaryOp(InsnIterator insn)
{
	auto &result = CreateConstant(insn);

	auto opcode = static_cast<spv::Op>(insn.word(3));
	auto const &lhs = getObject(insn.word(4));
	auto size = getType(lhs.type).sizeInComponents;

	for(auto i = 0u; i < size; i++)
	{
		auto &v = result.constantValue[i];
		auto l = lhs.constantValue[i];

		switch(opcode)
		{
		case spv::OpSConvert:
		case spv::OpFConvert:
		case spv::OpUConvert:
			UNREACHABLE("Not possible until we have multiple bit widths");
			break;

		case spv::OpSNegate:
			v = -(int)l;
			break;
		case spv::OpNot:
		case spv::OpLogicalNot:
			v = ~l;
			break;

		case spv::OpQuantizeToF16:
		{
			// Can do this nicer with host code, but want to perfectly mirror the reactor code we emit.
			auto abs = bit_cast<float>(l & 0x7FFFFFFF);
			auto sign = l & 0x80000000;
			auto isZero = abs < 0.000061035f ? ~0u : 0u;
			auto isInf = abs > 65504.0f ? ~0u : 0u;
			auto isNaN = (abs != abs) ? ~0u : 0u;
			auto isInfOrNan = isInf | isNaN;
			v = l & 0xFFFFE000;
			v &= ~isZero | 0x80000000;
			v = sign | (isInfOrNan & 0x7F800000) | (~isInfOrNan & v);
			v |= isNaN & 0x400000;
			break;
		}
		default:
			UNREACHABLE("EvalSpecConstantUnaryOp op: %s", OpcodeName(opcode).c_str());
		}
	}
}

void SpirvShader::EvalSpecConstantBinaryOp(InsnIterator insn)
{
	auto &result = CreateConstant(insn);

	auto opcode = static_cast<spv::Op>(insn.word(3));
	auto const &lhs = getObject(insn.word(4));
	auto const &rhs = getObject(insn.word(5));
	auto size = getType(lhs.type).sizeInComponents;

	for(auto i = 0u; i < size; i++)
	{
		auto &v = result.constantValue[i];
		auto l = lhs.constantValue[i];
		auto r = rhs.constantValue[i];

		switch(opcode)
		{
		case spv::OpIAdd:
			v = l + r;
			break;
		case spv::OpISub:
			v = l - r;
			break;
		case spv::OpIMul:
			v = l * r;
			break;
		case spv::OpUDiv:
			v = (r == 0) ? 0 : l / r;
			break;
		case spv::OpUMod:
			v = (r == 0) ? 0 : l % r;
			break;
		case spv::OpSDiv:
			if(r == 0) r = UINT32_MAX;
			if(l == static_cast<uint32_t>(INT32_MIN)) l = UINT32_MAX;
			v = static_cast<int32_t>(l) / static_cast<int32_t>(r);
			break;
		case spv::OpSRem:
			if(r == 0) r = UINT32_MAX;
			if(l == static_cast<uint32_t>(INT32_MIN)) l = UINT32_MAX;
			v = static_cast<int32_t>(l) % static_cast<int32_t>(r);
			break;
		case spv::OpSMod:
			if(r == 0) r = UINT32_MAX;
			if(l == static_cast<uint32_t>(INT32_MIN)) l = UINT32_MAX;
			// Test if a signed-multiply would be negative.
			v = static_cast<int32_t>(l) % static_cast<int32_t>(r);
			if((v & 0x80000000) != (r & 0x80000000))
				v += r;
			break;
		case spv::OpShiftRightLogical:
			v = l >> r;
			break;
		case spv::OpShiftRightArithmetic:
			v = static_cast<int32_t>(l) >> r;
			break;
		case spv::OpShiftLeftLogical:
			v = l << r;
			break;
		case spv::OpBitwiseOr:
		case spv::OpLogicalOr:
			v = l | r;
			break;
		case spv::OpBitwiseAnd:
		case spv::OpLogicalAnd:
			v = l & r;
			break;
		case spv::OpBitwiseXor:
			v = l ^ r;
			break;
		case spv::OpLogicalEqual:
		case spv::OpIEqual:
			v = (l == r) ? ~0u : 0u;
			break;
		case spv::OpLogicalNotEqual:
		case spv::OpINotEqual:
			v = (l != r) ? ~0u : 0u;
			break;
		case spv::OpULessThan:
			v = l < r ? ~0u : 0u;
			break;
		case spv::OpSLessThan:
			v = static_cast<int32_t>(l) < static_cast<int32_t>(r) ? ~0u : 0u;
			break;
		case spv::OpUGreaterThan:
			v = l > r ? ~0u : 0u;
			break;
		case spv::OpSGreaterThan:
			v = static_cast<int32_t>(l) > static_cast<int32_t>(r) ? ~0u : 0u;
			break;
		case spv::OpULessThanEqual:
			v = l <= r ? ~0u : 0u;
			break;
		case spv::OpSLessThanEqual:
			v = static_cast<int32_t>(l) <= static_cast<int32_t>(r) ? ~0u : 0u;
			break;
		case spv::OpUGreaterThanEqual:
			v = l >= r ? ~0u : 0u;
			break;
		case spv::OpSGreaterThanEqual:
			v = static_cast<int32_t>(l) >= static_cast<int32_t>(r) ? ~0u : 0u;
			break;
		default:
			UNREACHABLE("EvalSpecConstantBinaryOp op: %s", OpcodeName(opcode).c_str());
		}
	}
}

}  // namespace sw