112855Sgabeblack@google.com#include "systemc.h" 212855Sgabeblack@google.com 312855Sgabeblack@google.com 412855Sgabeblack@google.cominline void dump(sc_signed& value) 512855Sgabeblack@google.com{ 612855Sgabeblack@google.com sc_digit* ptr = value.get_raw(); 712855Sgabeblack@google.com printf(" %08x_%08x_%08x_%08x\n", 812855Sgabeblack@google.com (int)ptr[3], (int)ptr[2], (int)ptr[1], (int)ptr[0]); 912855Sgabeblack@google.com cout << " " << value << endl; 1012855Sgabeblack@google.com} 1112855Sgabeblack@google.com 1212855Sgabeblack@google.cominline void dump(sc_unsigned& value) 1312855Sgabeblack@google.com{ 1412855Sgabeblack@google.com sc_digit* ptr = value.get_raw(); 1512855Sgabeblack@google.com printf(" %08x_%08x_%08x_%08x\n", 1612855Sgabeblack@google.com (int)ptr[3], (int)ptr[2], (int)ptr[1], (int)ptr[0]); 1712855Sgabeblack@google.com cout << " " << value << endl; 1812855Sgabeblack@google.com} 1912855Sgabeblack@google.com 2012855Sgabeblack@google.com#define PARSE( SUBJECT ) \ 2112855Sgabeblack@google.com{ \ 2212855Sgabeblack@google.com src_p = SUBJECT; \ 2312855Sgabeblack@google.com cout << endl << #SUBJECT << ":" << endl; \ 2412855Sgabeblack@google.com svalue = src_p; \ 2512855Sgabeblack@google.com dump(svalue); \ 2612855Sgabeblack@google.com cout << endl; \ 2712855Sgabeblack@google.com value = src_p; \ 2812855Sgabeblack@google.com dump(value); \ 2912855Sgabeblack@google.com} 3012855Sgabeblack@google.com#define TEST(SUBJECT,EXPECTED) \ 3112855Sgabeblack@google.com{ \ 3212855Sgabeblack@google.com value = SUBJECT; \ 3312855Sgabeblack@google.com if ( value.to_uint64() != EXPECTED ) \ 3412855Sgabeblack@google.com { \ 3512855Sgabeblack@google.com printf("%s(%d): %s: %llx != %llx\n", \ 3612855Sgabeblack@google.com __FILE__, __LINE__, SUBJECT, value.to_uint64(), (uint64)EXPECTED);\ 3712855Sgabeblack@google.com } \ 3812855Sgabeblack@google.com} 3912855Sgabeblack@google.com 4012855Sgabeblack@google.com#define TESTs64(SUBJECT,EXPECTED) \ 4112855Sgabeblack@google.com{ \ 4212855Sgabeblack@google.com svalue64 = SUBJECT; \ 4312855Sgabeblack@google.com if ( svalue64 != (long long)EXPECTED ) \ 4412855Sgabeblack@google.com { \ 4512855Sgabeblack@google.com printf("%s(%d): %s: %llx != %llx\n", \ 4612855Sgabeblack@google.com __FILE__, __LINE__, SUBJECT, value.to_uint64(), (uint64)EXPECTED);\ 4712855Sgabeblack@google.com }\ 4812855Sgabeblack@google.com} 4912855Sgabeblack@google.com 5012855Sgabeblack@google.com#define TESTu64(SUBJECT,EXPECTED) \ 5112855Sgabeblack@google.com{ \ 5212855Sgabeblack@google.com uvalue64 = SUBJECT; \ 5312855Sgabeblack@google.com if ( uvalue64 != EXPECTED ) \ 5412855Sgabeblack@google.com { \ 5512855Sgabeblack@google.com printf("%s(%d): %s: %llx != %llx\n", \ 5612855Sgabeblack@google.com __FILE__, __LINE__, SUBJECT, value.to_uint64(), (uint64)EXPECTED);\ 5712855Sgabeblack@google.com }\ 5812855Sgabeblack@google.com} 5912855Sgabeblack@google.com 6012855Sgabeblack@google.com 6112855Sgabeblack@google.comint sc_main(int, char**) 6212855Sgabeblack@google.com{ 6312855Sgabeblack@google.com char buffer[128]; 6412855Sgabeblack@google.com unsigned long long expected; 6512855Sgabeblack@google.com sc_bigint<120> svalue; 6612855Sgabeblack@google.com sc_int<64> svalue64; 6712855Sgabeblack@google.com sc_uint<64> uvalue64; 6812855Sgabeblack@google.com sc_biguint<120> value; 6912855Sgabeblack@google.com 7012855Sgabeblack@google.com 7112855Sgabeblack@google.com TESTs64("0xusffffffff", 0xffffffff); 7212855Sgabeblack@google.com TESTs64("0xusffffffff", 0xffffffff); 7312855Sgabeblack@google.com TESTs64("0xusfffffff", 0xfffffff); 7412855Sgabeblack@google.com TESTs64("0XUSfedcab876543210", 0xfedcab876543210ull); 7512855Sgabeblack@google.com TESTs64("0ous77777777", 077777777); 7612855Sgabeblack@google.com TESTs64("0ous77777777", 077777777); 7712855Sgabeblack@google.com TESTs64("0Ous7654321076543", 07654321076543ull); 7812855Sgabeblack@google.com TESTs64("55555555555555", 55555555555555ull); 7912855Sgabeblack@google.com TESTs64("0bus1100110011001100", 0xcccc); 8012855Sgabeblack@google.com TESTs64("0bus1111111011011100101110101001100001110110010101000011001000010000", 8112855Sgabeblack@google.com 0xfedcba9876543210ll); 8212855Sgabeblack@google.com 8312855Sgabeblack@google.com TESTu64("0xusffffffff", 0xffffffff); 8412855Sgabeblack@google.com TESTu64("0xusffffffff", 0xffffffff); 8512855Sgabeblack@google.com TESTu64("0xusfffffff", 0xfffffff); 8612855Sgabeblack@google.com TESTu64("0XUSfedcab876543210", 0xfedcab876543210ull); 8712855Sgabeblack@google.com TESTu64("0ous77777777", 077777777); 8812855Sgabeblack@google.com TESTu64("0ous77777777", 077777777); 8912855Sgabeblack@google.com TESTu64("0Ous7654321076543", 07654321076543ull); 9012855Sgabeblack@google.com TESTu64("55555555555555", 55555555555555ull); 9112855Sgabeblack@google.com TESTu64("0bus1100110011001100", 0xcccc); 9212855Sgabeblack@google.com TESTu64("0bus1111111011011100101110101001100001110110010101000011001000010000", 9312855Sgabeblack@google.com 0xfedcba9876543210ll); 9412855Sgabeblack@google.com for ( int i = 0; i < 60; i++ ) 9512855Sgabeblack@google.com { 9612855Sgabeblack@google.com for ( int j = 0; j < 16; j++ ) 9712855Sgabeblack@google.com { 9812855Sgabeblack@google.com expected = j; 9912855Sgabeblack@google.com expected = expected << i; 10012855Sgabeblack@google.com sprintf(buffer, "0Xus%llx", expected); 10112855Sgabeblack@google.com TEST(buffer, expected); 10212855Sgabeblack@google.com TESTs64(buffer, expected); 10312855Sgabeblack@google.com TESTu64(buffer, expected); 10412855Sgabeblack@google.com sprintf(buffer, "0ous%llo", expected); 10512855Sgabeblack@google.com TEST(buffer, expected); 10612855Sgabeblack@google.com TESTs64(buffer, expected); 10712855Sgabeblack@google.com TESTu64(buffer, expected); 10812855Sgabeblack@google.com sprintf(buffer, "%lld", expected); 10912855Sgabeblack@google.com TEST(buffer, expected); 11012855Sgabeblack@google.com TESTs64(buffer, expected); 11112855Sgabeblack@google.com TESTu64(buffer, expected); 11212855Sgabeblack@google.com } 11312855Sgabeblack@google.com } 11412855Sgabeblack@google.com TEST("0xusffffffff", 0xffffffff); 11512855Sgabeblack@google.com TEST("0xusffffffff", 0xffffffff); 11612855Sgabeblack@google.com TEST("0xusfffffff", 0xfffffff); 11712855Sgabeblack@google.com TEST("0XUSfedcab876543210", 0xfedcab876543210ull); 11812855Sgabeblack@google.com TEST("0ous77777777", 077777777); 11912855Sgabeblack@google.com TEST("0ous77777777", 077777777); 12012855Sgabeblack@google.com TEST("0Ous7654321076543", 07654321076543ull); 12112855Sgabeblack@google.com TEST("55555555555555", 55555555555555ull); 12212855Sgabeblack@google.com TEST("0bus1100110011001100", 0xcccc); 12312855Sgabeblack@google.com TEST("0bus1111111011011100101110101001100001110110010101000011001000010000", 12412855Sgabeblack@google.com 0xfedcba9876543210ll); 12512855Sgabeblack@google.com 12613158Sgabeblack@google.com cout << "Program completed" << endl; 12712855Sgabeblack@google.com return 0; 12812855Sgabeblack@google.com} 129