1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include <stdio.h> 2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovchar base[] ="0123456789012345678901234567890123456789"; 4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid 6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstmg_no_wrap(void) 7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ 8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov char buf[24]; 9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov /* No-wrap around case; copies 24 bytes from BASE to BUF */ 11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov asm volatile( "lg 5, 0(%1)\n\t" 12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lg 6, 8(%1)\n\t" 13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lg 7, 16(%1)\n\t" 14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "stmg 5, 7, %0\n\t" 15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov :"=m" (buf) 16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "a" (base) 17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "5", "6", "7"); 18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov /* Write out BUF */ 19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov asm volatile( "lghi 2, 1\n\t" // stdout 20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lgr 3, %0\n\t" // buf 21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lghi 4, 24\n\t" // len = 3*8 bytes 22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "svc 4\n\t" 23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : : "a" (buf) 24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "2", "3", "4"); 25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid 28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstmg_wrap(void) 29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ 30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov char buf[64]; 31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov /* Wrap around case; copies 32 bytes from BASE to BUF */ 33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov asm volatile( "lg 15, 0(%1)\n\t" 34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lg 0, 8(%1)\n\t" 35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lg 1, 16(%1)\n\t" 36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lg 2, 24(%1)\n\t" 37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "stmg 15, 2, %0\n\t" 38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov :"=m" (buf) 39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "a" (base) 40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "15", "0", "1", "2"); 41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov /* Write out BUF */ 42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov asm volatile( "lghi 2, 1\n\t" // stdout 43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lgr 3, %0\n\t" // buf 44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "lghi 4, 32\n\t" // len = 4*8 bytes 45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "svc 4\n\t" 46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : : "a" (buf) 47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "2", "3", "4"); 48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovint main(void) 52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ 53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov stmg_no_wrap(); 54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("\n"); 55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov stmg_wrap(); 56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov printf("\n"); 57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov return 0; 59436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 60