1b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#include <stdio.h> 2b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 3b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define MUL_REG_MEM(insn, m1, m2) \ 4b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({ \ 5b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj unsigned long tmp1 = m1; \ 6b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj unsigned long tmp2 = m1; \ 7b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj asm volatile( "lgr 2, %0\n" \ 8b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr 3, %1\n" \ 9b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj #insn " 2, %2\n" \ 10b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr %0,2\n" \ 11b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr %1,3\n" \ 12b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "+d" (tmp1), "+d" (tmp2) \ 13b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "Q" (m2) \ 14b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "2","3"); \ 15b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ 16b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj}) 17b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 18b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define MUL_REG_REG(insn, m1, m2) \ 19b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({ \ 20b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj unsigned long tmp1 = m1; \ 21b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj unsigned long tmp2 = m1; \ 22b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj asm volatile( "lgr 2, %0\n" \ 23b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr 3, %1\n" \ 24b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj #insn " 2, %2\n" \ 25b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr %0,2\n" \ 26b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr %1,3\n" \ 27b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "+d" (tmp1), "+d" (tmp2) \ 28b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "d" (m2) \ 29b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "2","3"); \ 30b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ 31b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj}) 32b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 33b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define MUL_REG_IMM(insn, m1, m2) \ 34b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({ \ 35b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj unsigned long tmp1 = m1; \ 36b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj unsigned long tmp2 = m1; \ 37b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj asm volatile( "lgr 2, %0\n" \ 38b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr 3, %1\n" \ 39b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj #insn " 2, " #m2 "\n" \ 40b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr %0,2\n" \ 41b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj "lgr %1,3\n" \ 42b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj : "+d" (tmp1), "+d" (tmp2) \ 43b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj :: "2","3"); \ 44b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, (unsigned long) m2, tmp1, tmp2); \ 45b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj}) 46b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 47d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define MUL_REG_XIMM(insn, m1, um2, m2) \ 48d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 49d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp1 = m1; \ 50d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp2 = m1; \ 51d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj asm volatile( "lgr 2, %0\n" \ 52d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr 3, %1\n" \ 53d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj insn(2,m2) \ 54d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %0,2\n" \ 55d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %1,3\n" \ 56d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "+d" (tmp1), "+d" (tmp2) \ 57d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj :: "2","3"); \ 58d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj printf(#insn " %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, (unsigned long) 0x##um2##m2, tmp1, tmp2); \ 59d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 60d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj 61b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 62b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define memsweep(i, m2) \ 63b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({ \ 64b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0ul, m2); \ 65b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 1ul, m2); \ 66b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0xfffful, m2); \ 67b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0x7ffful, m2); \ 68b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0x8000ul, m2); \ 69b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0xfffffffful, m2); \ 70b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0x80000000ul, m2); \ 71b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0x7ffffffful, m2); \ 72b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0xfffffffffffffffful, m2); \ 73b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0x8000000000000000ul, m2); \ 74b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_MEM(i, 0x7ffffffffffffffful, m2); \ 75b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj}) 76b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 77b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define regsweep(i, m2) \ 78b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({ \ 79b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0ul, m2); \ 80b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 1ul, m2); \ 81b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0xfffful, m2); \ 82b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0x7ffful, m2); \ 83b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0x8000ul, m2); \ 84b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0xfffffffful, m2); \ 85b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0x80000000ul, m2); \ 86b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0x7ffffffful, m2); \ 87b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0xfffffffffffffffful, m2); \ 88b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0x8000000000000000ul, m2); \ 89b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_REG(i, 0x7ffffffffffffffful, m2); \ 90b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj}) 91b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 92b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#define immsweep(i, m2) \ 93b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj({ \ 94b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0ul, m2); \ 95b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 1ul, m2); \ 96b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0xfffful, m2); \ 97b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0x7ffful, m2); \ 98b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0x8000ul, m2); \ 99b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0xfffffffful, m2); \ 100b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0x80000000ul, m2); \ 101b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0x7ffffffful, m2); \ 102b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0xfffffffffffffffful, m2); \ 103b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0x8000000000000000ul, m2); \ 104b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj MUL_REG_IMM(i, 0x7ffffffffffffffful, m2); \ 105b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj}) 106b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj 107d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define ximmsweep(i, um2, m2) \ 108d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 109d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0ul, um2, m2); \ 110d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 1ul, um2, m2); \ 111d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0xfffful, um2, m2); \ 112d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0x7ffful, um2, m2); \ 113d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0x8000ul, um2, m2); \ 114d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0xfffffffful, um2, m2); \ 115d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0x80000000ul, um2, m2); \ 116d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0x7ffffffful, um2, m2); \ 117d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0xfffffffffffffffful, um2, m2); \ 118d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0x8000000000000000ul, um2, m2); \ 119d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_REG_XIMM(i, 0x7ffffffffffffffful, um2, m2); \ 120d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 121d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj 122d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define MUL_MSY(m1, m2) \ 123d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 124d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp1 = m1; \ 125d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp2 = m1; \ 126d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj register unsigned long *addr asm("5") = &m2; \ 127d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj asm volatile( "lgr 2, %0\n" \ 128d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr 3, %1\n" \ 129d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MSY(2,0,5,000,00) \ 130d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %0,2\n" \ 131d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %1,3\n" \ 132d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "+d" (tmp1), "+d" (tmp2) \ 133d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "Q" (m2), "d" (addr) \ 134d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "2","3"); \ 135d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj printf("msy %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ 136d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 137d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj 138d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define msysweep(s2) \ 139d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 140d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0ul, s2); \ 141d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(1ul, s2); \ 142d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0xfffful, s2); \ 143d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0x7ffful, s2); \ 144d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0x8000ul, s2); \ 145d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0xfffffffful, s2); \ 146d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0x80000000ul, s2); \ 147d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0x7ffffffful, s2); \ 148d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0xfffffffffffffffful, s2); \ 149d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0x8000000000000000ul, s2); \ 150d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MSY(0x7ffffffffffffffful, s2); \ 151d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 152d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj 153d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define MUL_MHY(m1, m2) \ 154d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 155d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp1 = m1; \ 156d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp2 = m1; \ 157d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj register unsigned long *addr asm("5") = &m2; \ 158d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj asm volatile( "lgr 2, %0\n" \ 159d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr 3, %1\n" \ 160d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MHY(2,0,5,000,00) \ 161d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %0,2\n" \ 162d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %1,3\n" \ 163d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "+d" (tmp1), "+d" (tmp2) \ 164d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "Q" (m2), "d" (addr) \ 165d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "2","3"); \ 166d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj printf("mhy %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ 167d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 168d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj 169d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define mhysweep(s2) \ 170d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 171d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0ul, s2); \ 172d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(1ul, s2); \ 173d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0xfffful, s2); \ 174d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0x7ffful, s2); \ 175d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0x8000ul, s2); \ 176d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0xfffffffful, s2); \ 177d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0x80000000ul, s2); \ 178d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0x7ffffffful, s2); \ 179d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0xfffffffffffffffful, s2); \ 180d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0x8000000000000000ul, s2); \ 181d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MHY(0x7ffffffffffffffful, s2); \ 182d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 183d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj 184d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define MUL_MFY(m1, m2) \ 185d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 186d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp1 = m1; \ 187d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj unsigned long tmp2 = m1; \ 188d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj register unsigned long *addr asm("5") = &m2; \ 189d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj asm volatile( "lgr 2, %0\n" \ 190d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr 3, %1\n" \ 191d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MFY(2,0,5,000,00) \ 192d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %0,2\n" \ 193d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj "lgr %1,3\n" \ 194d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "+d" (tmp1), "+d" (tmp2) \ 195d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "Q" (m2), "d" (addr) \ 196d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj : "2","3"); \ 197d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj printf("mfy %16.16lX * %16.16lX = %16.16lX%16.16lX\n", m1, m2, tmp1, tmp2); \ 198d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 199d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj 200d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj#define mfysweep(s2) \ 201d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj({ \ 202d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0ul, s2); \ 203d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(1ul, s2); \ 204d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0xfffful, s2); \ 205d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0x7ffful, s2); \ 206d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0x8000ul, s2); \ 207d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0xfffffffful, s2); \ 208d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0x80000000ul, s2); \ 209d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0x7ffffffful, s2); \ 210d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0xfffffffffffffffful, s2); \ 211d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0x8000000000000000ul, s2); \ 212d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj MUL_MFY(0x7ffffffffffffffful, s2); \ 213d50650d6cb0e3577ba28b470a4e5f5df8368afaasewardj}) 214