1#include <features.h> 2#include <signal.h> 3#include <sys/types.h> 4#include <pthread.h> 5#include <stdio.h> 6#include <stdlib.h> 7#include <string.h> 8#include <unistd.h> 9 10char source[40] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\0"; 11char target[40] = " \0"; 12 13pthread_t thread; 14 15void *threadfunc(void *arg) 16{ 17 char buf2[40]; 18 int i; 19 20 memset(buf2, 0, sizeof(buf2)); 21 for (i=0; i<5000; i++) 22 asm volatile( 23 "lghi 2,0\n" 24 "lghi 3,0\n" 25 "lgr 4,%0\n" 26 "lgr 5,%1\n" 27 "larl 1,1f\n" 28 "0: ex 0,0(1)\n" 29 "j 2f\n" 30 "1: mvc 0(30,4),0(5)\n" 31 "2:\n" 32 ::"a" (buf2), "a" (source) 33 : "1", "2", "3", "4", "5", "memory"); 34 printf("%s\n", buf2); 35 pthread_exit(0); 36} 37 38int main() 39{ 40 int i; 41 42 pthread_create(&thread, NULL, threadfunc, NULL); 43 44 for (i=0; i<5000; i++) 45 asm volatile( 46 "lghi 4,0\n" 47 "lghi 5,0\n" 48 "lgr 2,%0\n" 49 "lgr 3,%1\n" 50 "larl 1,1f\n" 51 "0: ex 0,0(1)\n" 52 "j 2f\n" 53 "1: mvc 0(20,2),0(3)\n" 54 "2:\n" 55 ::"a" (target), "a" (source) 56 : "1", "2", "3", "4", "5", "memory"); 57 pthread_join(thread, NULL); 58 printf("%s\n", target); 59 pthread_exit(0); 60} 61