test.c 2.1 KB
Newer Older
Ken Thompson's avatar
Ken Thompson committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138


/*
 * automatic code generated from
 * test.go in package "test"
 */

// basic types
typedef	unsigned char      _T_U8;
typedef	signed char        _T_I8;
typedef	unsigned short     _T_U16;
typedef	signed short       _T_I16;
typedef	unsigned long      _T_U32;
typedef	signed long        _T_I32;
typedef	unsigned long long _T_U64;
typedef	signed long long   _T_I64;
typedef	float              _T_F32;
typedef	double             _T_F64;
typedef	double             _T_F80;
typedef	int                _T_B;
typedef unsigned char*     _T_P;

#define	offsetof(s, m)     (_T_U32)(&(((s*)0)->m))

typedef	struct{_T_U32 I1; _T_U32 I2; _T_U32 I3;} _T_I;
typedef	struct{_T_U32 O1; _T_U32 O2;} _T_O;

void	test_main(void);
_T_O	test_simple(_T_I);
int	printf(char*, ...);

// external variables

void
test_main(void)
{

	// registers
	register union
	{
		_T_U8  _R_U8;
		_T_I8  _R_I8;
		_T_U16 _R_U16;
		_T_I16 _R_I16;
		_T_U32 _R_U32;
		_T_I32 _R_I32;
		_T_U64 _R_U64;
		_T_I64 _R_I64;
		_T_F32 _R_F32;
		_T_F64 _R_F64;
		_T_F80 _R_F80;
		_T_B   _R_B;
		_T_P   _R_P;
	} _U;

	// local variables
	_T_I32 _V_3; // x
	_T_I32 _V_4; // y

	{
		_T_I I;
		_T_O O;
		I.I1 = 10;
		I.I2 = 20;
		I.I3 = 30;
		O = test_simple(I);
		_V_3 = O.O1;
		_V_4 = O.O2;
	}

	//    1    7 LOAD_I32  NAME a(1) p(3) l(7) x G0 INT32
	_U._R_I32 = _V_3;

	//    2   10 CMP_I32   I15 LITERAL  a(1) l(10) INT32
	if(_U._R_I32 == 15)

	//    3   10 BEQ_I32   4
		goto _L4;

	printf("no 1 %d\n", _V_3);

	//    4    7 LOAD_I32  NAME a(1) p(4) l(7) y G0 INT32
_L4:
	_U._R_I32 = _V_4;

	//    5   11 CMP_I32   I50 LITERAL  a(1) l(11) INT32
	if(_U._R_I32 == 50)

	//    6   11 BEQ_I32   7
		goto _L7;

	printf("no 2 %d\n", _V_4);

	//    7    0 END      
_L7:
	;
}

_T_O
test_simple(_T_I I)
{

	// registers
	register union
	{
		_T_U8  _R_U8;
		_T_I8  _R_I8;
		_T_U16 _R_U16;
		_T_I16 _R_I16;
		_T_U32 _R_U32;
		_T_I32 _R_I32;
		_T_U64 _R_U64;
		_T_I64 _R_I64;
		_T_F32 _R_F32;
		_T_F64 _R_F64;
		_T_F80 _R_F80;
		_T_B   _R_B;
		_T_P   _R_P;
	} _U;

	_T_O O;

	int ia, ib, ic;
	ia = I.I1;
	ib = I.I2;
	ic = I.I3;

	O.O1 = ia+5;
	O.O2 = ib+ic;
	return O;
}

int
main(void)
{
	test_main();
	return 0;
}