/*
This file is part of JOP, the Java Optimized Processor
see <http://www.jopdesign.com/>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package fpu;
import com.jopdesign.sys.Native;
// class Native {
// public static float toFloat(int v) {
// return Float.intBitsToFloat(v);
// }
// }
public class GenFloatTestSim {
static float [] nums = { Float.NaN,
Float.MAX_VALUE,
Float.MIN_VALUE,
Float.NEGATIVE_INFINITY,
Float.POSITIVE_INFINITY,
0.0f,
1.0f,
-1.0f,
-126.0f,
-24.0f,
-2.0f,
2.0f,
24.0f,
127.0f,
3.14159f,
2.71828f,
// we have no invokestatic in Startup.interpret()
// use special native function
Native.toFloat(0x00800000),
Native.toFloat(0x33800000),
Native.toFloat(0x3E800000),
Native.toFloat(0x3F000000),
Native.toFloat(0x3F800000),
Native.toFloat(0x40000000),
Native.toFloat(0x40800000),
Native.toFloat(0x4B800000),
Native.toFloat(0x7F000000),
Native.toFloat(0x80800000),
Native.toFloat(0xB3800000),
Native.toFloat(0xBE800000),
Native.toFloat(0xBF000000),
Native.toFloat(0xBF800000),
Native.toFloat(0xC0000000),
Native.toFloat(0xC0800000),
Native.toFloat(0xCB800000),
Native.toFloat(0xFE800000),
Native.toFloat(0x00000000),
Native.toFloat(0x00000001),
Native.toFloat(0x00000002),
Native.toFloat(0x00000004),
Native.toFloat(0x00000008),
Native.toFloat(0x00000010),
Native.toFloat(0x00000020),
Native.toFloat(0x00000040),
Native.toFloat(0x00000080),
Native.toFloat(0x00000100),
Native.toFloat(0x00000200),
Native.toFloat(0x00000400),
Native.toFloat(0x00000800),
Native.toFloat(0x00001000),
Native.toFloat(0x00002000),
Native.toFloat(0x00004000),
Native.toFloat(0x00008000),
Native.toFloat(0x00010000),
Native.toFloat(0x00020000),
Native.toFloat(0x00040000),
Native.toFloat(0x00080000),
Native.toFloat(0x00100000),
Native.toFloat(0x00200000),
Native.toFloat(0x00400000),
Native.toFloat(0x00800000),
Native.toFloat(0x01000000),
Native.toFloat(0x02000000),
Native.toFloat(0x04000000),
Native.toFloat(0x08000000),
Native.toFloat(0x10000000),
Native.toFloat(0x20000000),
Native.toFloat(0x40000000),
Native.toFloat(0x80000000),
Native.toFloat(0xC0000000),
Native.toFloat(0xE0000000),
Native.toFloat(0xF0000000),
Native.toFloat(0xF8000000),
Native.toFloat(0xFC000000),
Native.toFloat(0xFE000000),
Native.toFloat(0xFF000000),
Native.toFloat(0xFF800000),
Native.toFloat(0xFFC00000),
Native.toFloat(0xFFE00000),
Native.toFloat(0xFFF00000),
Native.toFloat(0xFFF80000),
Native.toFloat(0xFFFC0000),
Native.toFloat(0xFFFE0000),
Native.toFloat(0xFFFF0000),
Native.toFloat(0xFFFF8000),
Native.toFloat(0xFFFFC000),
Native.toFloat(0xFFFFE000),
Native.toFloat(0xFFFFF000),
Native.toFloat(0xFFFFF800),
Native.toFloat(0xFFFFFC00),
Native.toFloat(0xFFFFFE00),
Native.toFloat(0xFFFFFF00),
Native.toFloat(0xFFFFFF80),
Native.toFloat(0xFFFFFFC0),
Native.toFloat(0xFFFFFFE0),
Native.toFloat(0xFFFFFFF0),
Native.toFloat(0xFFFFFFF8),
Native.toFloat(0xFFFFFFFC),
Native.toFloat(0xFFFFFFFE),
Native.toFloat(0xFFFFFFFF),
Native.toFloat(0xFFFFFFFE),
Native.toFloat(0xFFFFFFFD),
Native.toFloat(0xFFFFFFFB),
Native.toFloat(0xFFFFFFF7),
Native.toFloat(0xFFFFFFEF),
Native.toFloat(0xFFFFFFDF),
Native.toFloat(0xFFFFFFBF),
Native.toFloat(0xFFFFFF7F),
Native.toFloat(0xFFFFFEFF),
Native.toFloat(0xFFFFFDFF),
Native.toFloat(0xFFFFFBFF),
Native.toFloat(0xFFFFF7FF),
Native.toFloat(0xFFFFEFFF),
Native.toFloat(0xFFFFDFFF),
Native.toFloat(0xFFFFBFFF),
Native.toFloat(0xFFFF7FFF),
Native.toFloat(0xFFFEFFFF),
Native.toFloat(0xFFFDFFFF),
Native.toFloat(0xFFFBFFFF),
Native.toFloat(0xFFF7FFFF),
Native.toFloat(0xFFEFFFFF),
Native.toFloat(0xFFDFFFFF),
Native.toFloat(0xFFBFFFFF),
Native.toFloat(0xFF7FFFFF),
Native.toFloat(0xFEFFFFFF),
Native.toFloat(0xFDFFFFFF),
Native.toFloat(0xFBFFFFFF),
Native.toFloat(0xF7FFFFFF),
Native.toFloat(0xEFFFFFFF),
Native.toFloat(0xDFFFFFFF),
Native.toFloat(0xBFFFFFFF),
Native.toFloat(0x7FFFFFFF),
Native.toFloat(0x3FFFFFFF),
Native.toFloat(0x1FFFFFFF),
Native.toFloat(0x0FFFFFFF),
Native.toFloat(0x07FFFFFF),
Native.toFloat(0x03FFFFFF),
Native.toFloat(0x01FFFFFF),
Native.toFloat(0x00FFFFFF),
Native.toFloat(0x007FFFFF),
Native.toFloat(0x003FFFFF),
Native.toFloat(0x001FFFFF),
Native.toFloat(0x000FFFFF),
Native.toFloat(0x0007FFFF),
Native.toFloat(0x0003FFFF),
Native.toFloat(0x0001FFFF),
Native.toFloat(0x0000FFFF),
Native.toFloat(0x00007FFF),
Native.toFloat(0x00003FFF),
Native.toFloat(0x00001FFF),
Native.toFloat(0x00000FFF),
Native.toFloat(0x000007FF),
Native.toFloat(0x000003FF),
Native.toFloat(0x000001FF),
Native.toFloat(0x000000FF),
Native.toFloat(0x0000007F),
Native.toFloat(0x0000003F),
Native.toFloat(0x0000001F),
Native.toFloat(0x0000000F),
Native.toFloat(0x00000007),
Native.toFloat(0x00000003),
Native.toFloat(0x80000000),
Native.toFloat(0x80000001),
Native.toFloat(0x80000002),
Native.toFloat(0x80000004),
Native.toFloat(0x80000008),
Native.toFloat(0x80000010),
Native.toFloat(0x80000020),
Native.toFloat(0x80000040),
Native.toFloat(0x80000080),
Native.toFloat(0x80000100),
Native.toFloat(0x80000200),
Native.toFloat(0x80000400),
Native.toFloat(0x80000800),
Native.toFloat(0x80001000),
Native.toFloat(0x80002000),
Native.toFloat(0x80004000),
Native.toFloat(0x80008000),
Native.toFloat(0x80010000),
Native.toFloat(0x80020000),
Native.toFloat(0x80040000),
Native.toFloat(0x80080000),
Native.toFloat(0x80100000),
Native.toFloat(0x80200000),
Native.toFloat(0x80400000),
Native.toFloat(0x80800000),
Native.toFloat(0x81000000),
Native.toFloat(0x82000000),
Native.toFloat(0x84000000),
Native.toFloat(0x88000000),
Native.toFloat(0x90000000),
Native.toFloat(0xA0000000),
Native.toFloat(0xC0000000),
Native.toFloat(0x80000000),
Native.toFloat(0xBFFFFFFF),
Native.toFloat(0x9FFFFFFF),
Native.toFloat(0x8FFFFFFF),
Native.toFloat(0x87FFFFFF),
Native.toFloat(0x83FFFFFF),
Native.toFloat(0x81FFFFFF),
Native.toFloat(0x80FFFFFF),
Native.toFloat(0x807FFFFF),
Native.toFloat(0x803FFFFF),
Native.toFloat(0x801FFFFF),
Native.toFloat(0x800FFFFF),
Native.toFloat(0x8007FFFF),
Native.toFloat(0x8003FFFF),
Native.toFloat(0x8001FFFF),
Native.toFloat(0x8000FFFF),
Native.toFloat(0x80007FFF),
Native.toFloat(0x80003FFF),
Native.toFloat(0x80001FFF),
Native.toFloat(0x80000FFF),
Native.toFloat(0x800007FF),
Native.toFloat(0x800003FF),
Native.toFloat(0x800001FF),
Native.toFloat(0x800000FF),
Native.toFloat(0x8000007F),
Native.toFloat(0x8000003F),
Native.toFloat(0x8000001F),
Native.toFloat(0x8000000F),
Native.toFloat(0x80000007),
Native.toFloat(0x80000003),
Native.toFloat(0xabfb2c81),
Native.toFloat(0xeb21fece),
Native.toFloat(0x361b388b),
Native.toFloat(0x7621d144),
Native.toFloat(0x838b1c87),
Native.toFloat(0x4476555a),
Native.toFloat(0xac7cc276),
Native.toFloat(0xec4111fe),
Native.toFloat(0x83bd1c1b),
Native.toFloat(0x43bd69ec),
Native.toFloat(0xb08711b2),
Native.toFloat(0x70e7fc01),
Native.toFloat(0xb6c4c126),
Native.toFloat(0xf84a5aed),
Native.toFloat(0x9e1b55f9),
Native.toFloat(0x5e99b660),
Native.toFloat(0xbfc02e00),
Native.toFloat(0xc2020300),
Native.toFloat(0xc22a0300),
Native.toFloat(0xc2020300),
Native.toFloat(0xc1780200),
Native.toFloat(0xc1e40400),
Native.toFloat(0xbfc02c00),
Native.toFloat(0xc1180d00),
Native.toFloat(0xc2df0100),
Native.toFloat(0xc19c0000),
Native.toFloat(0xc2950100),
Native.toFloat(0xc2a30100),
Native.toFloat(0xc2c30100),
Native.toFloat(0x3effffff)
};
public static void main (String[] args) {
System.out.println("Testing floating-point operations...");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
System.out.println(Integer.toHexString(Float.floatToIntBits(nums[i] + nums[k])));
}
}
System.out.println("Testing + finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
System.out.println(Integer.toHexString(Float.floatToIntBits(nums[i] - nums[k])));
}
}
System.out.println("Testing - finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
System.out.println(Integer.toHexString(Float.floatToIntBits(nums[i] * nums[k])));
}
}
System.out.println("Testing * finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
System.out.println(Integer.toHexString(Float.floatToIntBits(nums[i] / nums[k])));
}
}
System.out.println("Testing / finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
System.out.println(Integer.toHexString(Float.floatToIntBits(nums[i] % nums[k])));
}
}
System.out.println("Testing % finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
if (nums[i] < nums[k])
System.err.println("true");
else
System.err.println("false");
}
}
System.out.println("Testing < finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
if (nums[i] > nums[k])
System.err.println("true");
else
System.err.println("false");
}
}
System.out.println("Testing > finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
if (nums[i] <= nums[k])
System.err.println("true");
else
System.err.println("false");
}
}
System.out.println("Testing <= finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
if (nums[i] >= nums[k])
System.err.println("true");
else
System.err.println("false");
}
}
System.out.println("Testing >= finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
if (nums[i] == nums[k])
System.err.println("true");
else
System.err.println("false");
}
}
System.out.println("Testing == finished.");
for (int i=0; i<nums.length; i++) {
for (int k=0; k<nums.length; k++) {
if (nums[i] != nums[k])
System.err.println("true");
else
System.err.println("false");
}
}
System.out.println("Testing != finished.");
for (int i=0; i<nums.length; i++) {
System.out.println(Integer.toHexString(Float.floatToIntBits(-(nums[i]))));
}
System.out.println("Testing - finished.");
for (int i=0; i<nums.length; i++) {
System.out.println(Integer.toHexString(Float.floatToIntBits((int)(nums[i]))));
}
System.out.println("Testing (int) finished.");
for (int i=0; i<nums.length; i++) {
System.out.println(Integer.toHexString(Float.floatToIntBits(Math.round(nums[i]))));
}
System.out.println("Testing Math.round finished.");
System.err.println("All tests finished.");
}
}