1a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes#include <stdio.h> 2a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes#include <stdlib.h> 3a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughestypedef unsigned long long int ULong; 4a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 5a0664b9ca67b594bd6f570a61d3301167a24750cElliott HughesULong data; 6a0664b9ca67b594bd6f570a61d3301167a24750cElliott HughesULong result; 7a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 8a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 9a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughesextern void shrl32_with_0x10 ( void ); 10a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughesasm("\n" 11a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"shrl32_with_0x10:\n" 12a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tpushq %rdx\n" 13a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tmovq data, %rdx\n" 14a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tshr $0x10, %edx\n" 15a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tjne shrl32_with_0x10_jump\n" 16a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tshrl32_with_0x10_cont:\n" 17a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tmovq %rdx, result\n" 18a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tpopq %rdx\n" 19a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tret\n" 20a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tshrl32_with_0x10_jump:\n" 21a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tmov $0xdeaddead, %edx\n" 22a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes"\tjmp shrl32_with_0x10_cont\n" 23a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes); 24a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 25a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 26a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughesint main ( void ) 27a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes{ 28a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes char *p; 29a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 30a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes printf("\nshrl 0x10 with unitialised bits\n"); 31a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes ULong *notinitialised = malloc(sizeof(ULong)); // Not initialised data. 32a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes data = *notinitialised; 33a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p = (char*) &data; 34a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p[0] = 0x11; 35a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes // p[1] = 0x22; 36a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p[2] = 0x33; 37a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p[3] = 0x44; 38a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 39a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes shrl32_with_0x10(); 40a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 41a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes printf("non zero jump on p[2..3] 0x%016llx\n", result); 42a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 43a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes data = *notinitialised; 44a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p = (char*) &data; 45a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p[0] = 0x00; 46a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes // p[1] = 0x00; 47a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p[2] = 0x00; 48a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes p[3] = 0x00; 49a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 50a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes shrl32_with_0x10(); 51a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes 52a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes printf("zero jump on p[2..3] 0x%016llx\n", result); 53a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes return 0; 54a0664b9ca67b594bd6f570a61d3301167a24750cElliott Hughes} 55