tr.c revision 663860b1408516d02ebfcb3a9999a134e6cfb223
1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include<stdio.h> 2ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include<stdlib.h> 3ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include<asm/types.h> 4ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include<stdint.h> 5ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include<string.h> 6ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "table.h" 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 8ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochuint8_t buff[40]; 9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid tr(uint8_t *codepage, uint8_t *addr, uint64_t len) 11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch{ 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch asm volatile( 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " larl 1,1f\n" 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "1: tr 0(1,%0),0(%2)\n" 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch " ex %1,0(1)" 16ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch : "+&a" (addr), "+a" (len) 17ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch : "a" (codepage) : "cc", "memory", "1"); 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 20void run_test(void *tran_table, void *srcaddr, uint64_t len) 21{ 22 int i; 23 24 tr(tran_table, buff, len); 25 printf("the translated string is "); 26 for (i = 0; i < len; i++) { 27 printf("%c", buff[i]); 28 } 29 printf("\n"); 30} 31 32int main() 33{ 34 /* Test 1: length = 0 */ 35 run_test((char *)&touppercase, &buff, 0); 36 run_test((char *)&touppercase, &buff, 0); 37 38 /* Test 2 : length > 0 */ 39 memset(buff, 'a', 1); 40 run_test((char *)&touppercase, &buff, 1); 41 42 memcpy(buff, "abcdefgh", 8); 43 run_test((char *)&touppercase, &buff, 3); 44 run_test((char *)&touppercase, &buff, 3); 45 run_test((char *)&touppercase, &buff, 8); 46 47 memcpy(buff, "ABCDEFGH", 8); 48 run_test((char *)&tolowercase, &buff, 3); 49 run_test((char *)&tolowercase, &buff, 3); 50 run_test((char *)&tolowercase, &buff, 8); 51 52 memcpy(buff, "0123456789", 9); 53 run_test((char *)&touppercase, &buff, 9); 54 run_test((char *)&tolowercase, &buff, 9); 55 return 0; 56} 57