Connecting the dots for some built-in functions

- Completed implementation of round
  and hyperbolic trigonometry operations
- Added a few more cases in op to string
  functions

Change-Id: Ic09d228de8e4446a66152b70edc6a6bba511288a
Reviewed-on: https://swiftshader-review.googlesource.com/2891
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Shader/VertexProgram.cpp b/src/Shader/VertexProgram.cpp
index 7cd1daa..a2b4537 100644
--- a/src/Shader/VertexProgram.cpp
+++ b/src/Shader/VertexProgram.cpp
@@ -118,9 +118,9 @@
 			Vector4f s1;
 			Vector4f s2;
 
-			if(src0.type != Shader::PARAMETER_VOID) s0 = reg(r, src0);
-			if(src1.type != Shader::PARAMETER_VOID) s1 = reg(r, src1);
-			if(src2.type != Shader::PARAMETER_VOID) s2 = reg(r, src2);
+			if(src0.type != Shader::PARAMETER_VOID) s0 = fetchRegisterF(r, src0);
+			if(src1.type != Shader::PARAMETER_VOID) s1 = fetchRegisterF(r, src1);
+			if(src2.type != Shader::PARAMETER_VOID) s2 = fetchRegisterF(r, src2);
 
 			switch(opcode)
 			{
@@ -163,6 +163,7 @@
 			case Shader::OPCODE_FRC:		frc(d, s0);						break;
 			case Shader::OPCODE_TRUNC:      trunc(d, s0);                   break;
 			case Shader::OPCODE_FLOOR:      floor(d, s0);                   break;
+			case Shader::OPCODE_ROUND:      round(d, s0);                   break;
 			case Shader::OPCODE_CEIL:       ceil(d, s0);                    break;
 			case Shader::OPCODE_LIT:		lit(d, s0);						break;
 			case Shader::OPCODE_LOG2X:		log2x(d, s0, pp);				break;
@@ -213,6 +214,12 @@
 			case Shader::OPCODE_ASIN:		asin(d, s0);					break;
 			case Shader::OPCODE_ATAN:		atan(d, s0);					break;
 			case Shader::OPCODE_ATAN2:		atan2(d, s0, s1);				break;
+			case Shader::OPCODE_COSH:		cosh(d, s0, pp);				break;
+			case Shader::OPCODE_SINH:		sinh(d, s0, pp);				break;
+			case Shader::OPCODE_TANH:		tanh(d, s0, pp);				break;
+			case Shader::OPCODE_ACOSH:		acosh(d, s0, pp);				break;
+			case Shader::OPCODE_ASINH:		asinh(d, s0, pp);				break;
+			case Shader::OPCODE_ATANH:		atanh(d, s0, pp);				break;
 			case Shader::OPCODE_SLT:		slt(d, s0, s1);					break;
 			case Shader::OPCODE_SUB:		sub(d, s0, s1);					break;
 			case Shader::OPCODE_BREAK:		BREAK(r);						break;
@@ -596,7 +603,7 @@
 		}
 	}
 
-	Vector4f VertexProgram::reg(Registers &r, const Src &src, int offset)
+	Vector4f VertexProgram::fetchRegisterF(Registers &r, const Src &src, int offset)
 	{
 		int i = src.index + offset;
 
@@ -859,8 +866,8 @@
 
 	void VertexProgram::M3X2(Registers &r, Vector4f &dst, Vector4f &src0, Src &src1)
 	{
-		Vector4f row0 = reg(r, src1, 0);
-		Vector4f row1 = reg(r, src1, 1);
+		Vector4f row0 = fetchRegisterF(r, src1, 0);
+		Vector4f row1 = fetchRegisterF(r, src1, 1);
 
 		dst.x = dot3(src0, row0);
 		dst.y = dot3(src0, row1);
@@ -868,9 +875,9 @@
 
 	void VertexProgram::M3X3(Registers &r, Vector4f &dst, Vector4f &src0, Src &src1)
 	{
-		Vector4f row0 = reg(r, src1, 0);
-		Vector4f row1 = reg(r, src1, 1);
-		Vector4f row2 = reg(r, src1, 2);
+		Vector4f row0 = fetchRegisterF(r, src1, 0);
+		Vector4f row1 = fetchRegisterF(r, src1, 1);
+		Vector4f row2 = fetchRegisterF(r, src1, 2);
 
 		dst.x = dot3(src0, row0);
 		dst.y = dot3(src0, row1);
@@ -879,10 +886,10 @@
 
 	void VertexProgram::M3X4(Registers &r, Vector4f &dst, Vector4f &src0, Src &src1)
 	{
-		Vector4f row0 = reg(r, src1, 0);
-		Vector4f row1 = reg(r, src1, 1);
-		Vector4f row2 = reg(r, src1, 2);
-		Vector4f row3 = reg(r, src1, 3);
+		Vector4f row0 = fetchRegisterF(r, src1, 0);
+		Vector4f row1 = fetchRegisterF(r, src1, 1);
+		Vector4f row2 = fetchRegisterF(r, src1, 2);
+		Vector4f row3 = fetchRegisterF(r, src1, 3);
 
 		dst.x = dot3(src0, row0);
 		dst.y = dot3(src0, row1);
@@ -892,9 +899,9 @@
 
 	void VertexProgram::M4X3(Registers &r, Vector4f &dst, Vector4f &src0, Src &src1)
 	{
-		Vector4f row0 = reg(r, src1, 0);
-		Vector4f row1 = reg(r, src1, 1);
-		Vector4f row2 = reg(r, src1, 2);
+		Vector4f row0 = fetchRegisterF(r, src1, 0);
+		Vector4f row1 = fetchRegisterF(r, src1, 1);
+		Vector4f row2 = fetchRegisterF(r, src1, 2);
 
 		dst.x = dot4(src0, row0);
 		dst.y = dot4(src0, row1);
@@ -903,10 +910,10 @@
 
 	void VertexProgram::M4X4(Registers &r, Vector4f &dst, Vector4f &src0, Src &src1)
 	{
-		Vector4f row0 = reg(r, src1, 0);
-		Vector4f row1 = reg(r, src1, 1);
-		Vector4f row2 = reg(r, src1, 2);
-		Vector4f row3 = reg(r, src1, 3);
+		Vector4f row0 = fetchRegisterF(r, src1, 0);
+		Vector4f row1 = fetchRegisterF(r, src1, 1);
+		Vector4f row2 = fetchRegisterF(r, src1, 2);
+		Vector4f row3 = fetchRegisterF(r, src1, 3);
 
 		dst.x = dot4(src0, row0);
 		dst.y = dot4(src0, row1);
@@ -1188,7 +1195,7 @@
 		}
 		else
 		{
-			Int4 condition = As<Int4>(reg(r, src).x);
+			Int4 condition = As<Int4>(fetchRegisterF(r, src).x);
 			IF(r, condition);
 		}
 	}
@@ -1358,7 +1365,7 @@
 		Nucleus::setInsertBlock(testBlock);
 		r.enableContinue = restoreContinue;
 
-		const Vector4f &src = reg(r, temporaryRegister);
+		const Vector4f &src = fetchRegisterF(r, temporaryRegister);
 		Int4 condition = As<Int4>(src.x);
 		condition &= r.enableStack[r.enableIndex - 1];
 		r.enableStack[r.enableIndex] = condition;
@@ -1453,7 +1460,7 @@
 		}
 		else
 		{
-			Int index = As<Int>(Float(reg(r, s).x.x));
+			Int index = As<Int>(Float(fetchRegisterF(r, s).x.x));
 
 			for(int i = 0; i < 16; i++)
 			{