1663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <stdio.h> 2663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include <stdint.h> 3663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#include "opcodes.h" 4663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 5663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define BRASLCLOBBER "0","1","2","3","4","5","14", \ 6663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "f0","f1","f2","f3","f4","f5","f6","f7" 7663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 8663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_eq(void) { printf("equal\n"); } 9663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_ne(void) { printf("not equal\n"); } 10663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_gt(void) { printf("greater than\n"); } 11663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_le(void) { printf("less or equal\n"); } 12663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_lt(void) { printf("less than\n"); } 13663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_ge(void) { printf("greater or equal\n"); } 14663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_taken(void) { printf("taken\n"); } 15663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid if_not_taken(void) { printf("not taken\n"); } 16663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 17663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#undef LT 18663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define NEVER 0 19663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define GT 2 20663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define LT 4 21663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define NE 6 22663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define EQ 8 23663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define LE C 24663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define GE A 25663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define ALWAYS E 26663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 27663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 28663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_never(int64_t value) 29663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 30663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 31663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 32663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 33663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 34663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,NEVER,8,2a) "\n\t" /* 0x2a == 42 */ 35663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_not_taken\n\t" 36663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 37663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_taken\n\t" 38663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 39663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 40663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 41663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 42663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_always(int64_t value) 43663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 44663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 45663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 46663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 47663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 48663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,ALWAYS,8,2a) "\n\t" /* 0x2a == 42 */ 49663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_not_taken\n\t" 50663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 51663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_taken\n\t" 52663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 53663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 54663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 55663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 56663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_le42(int64_t value) 57663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 58663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 59663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 60663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 61663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 62663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,LE,8,2a) "\n\t" /* 0x2a == 42 */ 63663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_gt\n\t" 64663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 65663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_le\n\t" 66663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 67663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 68663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 69663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 70663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_ge42(int64_t value) 71663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 72663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 73663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 74663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 75663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 76663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,GE,8,2a) "\n\t" /* 0x2a == 42 */ 77663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_lt\n\t" 78663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 79663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_ge\n\t" 80663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 81663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 82663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 83663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 84663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_gt42(int64_t value) 85663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 86663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 87663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 88663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 89663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 90663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,GT,8,2a) "\n\t" /* 0x2a == 42 */ 91663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_le\n\t" 92663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 93663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_gt\n\t" 94663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 95663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 96663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 97663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 98663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_lt42(int64_t value) 99663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,LT,8,2a) "\n\t" /* 0x2a == 42 */ 105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_ge\n\t" 106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_lt\n\t" 108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 110663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 111663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 112663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_eq42(int64_t value) 113663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 114663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 115663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 116663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 117663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 118663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,EQ,8,2a) "\n\t" /* 0x2a == 42 */ 119663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_ne\n\t" 120663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 121663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_eq\n\t" 122663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 123663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 124663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 125663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 126663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengvoid compare_ne42(int64_t value) 127663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 128663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng register int64_t val asm("r7") = value; 129663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 130663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng asm volatile( 131663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "aghi 15,-160\n\t" 132663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng CGIJ(7,NE,8,2a) "\n\t" /* 0x2a == 42 */ 133663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_eq\n\t" 134663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "j 0f\n\t" 135663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "brasl 14,if_ne\n\t" 136663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng "0: aghi 15,160\n\t" : : "d"(val) : "15", BRASLCLOBBER); 137663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return; 138663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 139663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 140663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengint main() 141663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng{ 142663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_eq42(-12); 143663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_eq42(42); 144663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_eq42(100); 145663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 146663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_ne42(-12); 147663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_ne42(42); 148663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_ne42(100); 149663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 150663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_gt42(-12); 151663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_gt42(42); 152663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_gt42(100); 153663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 154663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_lt42(-12); 155663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_lt42(42); 156663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_lt42(100); 157663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 158663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_le42(-12); 159663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_le42(42); 160663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_le42(100); 161663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 162663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_ge42(-12); 163663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_ge42(42); 164663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_ge42(100); 165663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 166663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_never(-12); 167663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_never(42); 168663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_never(100); 169663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 170663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_always(-12); 171663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_always(42); 172663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng compare_always(100); 173663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 174663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng return 0; 175663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng} 176