| #include <unistd.h> |
| |
| char base[] ="0123456789012345678901234567890123456789"; |
| |
| void |
| stmg_no_wrap(void) |
| { |
| char buf[24]; |
| |
| /* No-wrap around case; copies 24 bytes from BASE to BUF */ |
| asm volatile( "lg 5, 0(%1)\n\t" |
| "lg 6, 8(%1)\n\t" |
| "lg 7, 16(%1)\n\t" |
| "stmg 5, 7, %0\n\t" |
| :"=m" (buf) |
| : "a" (base) |
| : "5", "6", "7"); |
| /* Write out BUF */ |
| asm volatile( "lghi 2, 1\n\t" // stdout |
| "lgr 3, %0\n\t" // buf |
| "lghi 4, 24\n\t" // len = 3*8 bytes |
| "svc 4\n\t" |
| : : "a" (buf) |
| : "2", "3", "4"); |
| } |
| |
| void |
| stmg_wrap(void) |
| { |
| char buf[64]; |
| |
| /* Wrap around case; copies 32 bytes from BASE to BUF */ |
| asm volatile( "lg 15, 0(%1)\n\t" |
| "lg 0, 8(%1)\n\t" |
| "lg 1, 16(%1)\n\t" |
| "lg 2, 24(%1)\n\t" |
| "stmg 15, 2, %0\n\t" |
| :"=m" (buf) |
| : "a" (base) |
| : "15", "0", "1", "2"); |
| /* Write out BUF */ |
| asm volatile( "lghi 2, 1\n\t" // stdout |
| "lgr 3, %0\n\t" // buf |
| "lghi 4, 32\n\t" // len = 4*8 bytes |
| "svc 4\n\t" |
| : : "a" (buf) |
| : "2", "3", "4"); |
| } |
| |
| |
| int main(void) |
| { |
| stmg_no_wrap(); |
| write(1, "\n", 1); |
| stmg_wrap(); |
| write(1, "\n", 1); |
| |
| return 0; |
| } |