#include<stdio.h> #include<stdlib.h> #include<asm/types.h> #include<stdint.h> #include<string.h> #include "table.h" uint8_t buff[40]; void tr(uint8_t *codepage, uint8_t *addr, uint64_t len) { asm volatile( " larl 1,1f\n" "1: tr 0(1,%0),0(%2)\n" " ex %1,0(1)" : "+&a" (addr), "+a" (len) : "a" (codepage) : "cc", "memory", "1"); } void run_test(void *tran_table, void *srcaddr, uint64_t len) { int i; tr(tran_table, buff, len); printf("the translated string is "); for (i = 0; i < len; i++) { printf("%c", buff[i]); } printf("\n"); } int main() { /* Test 1: length = 0 */ run_test((char *)&touppercase, &buff, 0); run_test((char *)&touppercase, &buff, 0); /* Test 2 : length > 0 */ memset(buff, 'a', 1); run_test((char *)&touppercase, &buff, 1); memcpy(buff, "abcdefgh", 8); run_test((char *)&touppercase, &buff, 3); run_test((char *)&touppercase, &buff, 3); run_test((char *)&touppercase, &buff, 8); memcpy(buff, "ABCDEFGH", 8); run_test((char *)&tolowercase, &buff, 3); run_test((char *)&tolowercase, &buff, 3); run_test((char *)&tolowercase, &buff, 8); memcpy(buff, "0123456789", 9); run_test((char *)&touppercase, &buff, 9); run_test((char *)&tolowercase, &buff, 9); return 0; }