Sun Studio 12: C User's Guide

B.2.111 -xmemalign=ab

(SPARC) Use the -xmemalign option to control the assumptions the compiler makes about the alignment of data. By controlling the code generated for potentially misaligned memory accesses and by controlling program behavior in the event of a misaligned access, you can more easily port your code to SPARC.

Specify the maximum assumed memory alignment and behavior of misaligned data accesses. There must be a value for both a (alignment) and b (behavior). a specifies the maximum assumed memory alignment and b specifies the behavior for misaligned memory accesses. The following table lists the alignment and behavior values for -xmemalign.

Table B–28 The -xmemalign Alignment and Behavior Flags

a

 

b

 

1

Assume at most 1 byte alignment. 

i

Interpret access and continue execution. 

2

Assume at most 2 byte alignment. 

s

Raise signal SIGBUS. 

4

Assume at most 4 byte alignment. 

f

For variants of -xarch=v9 only:

Raise signal SIGBUS for alignments less or equal to 4,otherwise interpret access and continue execution. For all other -xarch values, the f flag is equivalent to i.

8

Assume at most 8 byte alignment. 

   

16

Assume at most 16 byte alignment 

   

You must specify -xmemalign whenever you want to link to an object file that was compiled with the value of b set to either i or f. For a complete list of all compiler options that must be specified at both compile time and at link time, see Table A–2.

For memory accesses where the alignment is determinable at compile time, the compiler generates the appropriate load/store instruction sequence for that alignment of data.

For memory accesses where the alignment cannot be determined at compile time, the compiler must assume an alignment to generate the needed load/store sequence.

The -xmemalign option allows you to specify the maximum memory alignment of data to be assumed by the compiler in these indeterminable situations. It also specifies the error behavior to be followed at run time when a misaligned memory access does take place.

If actual data alignment at runtime is less than the specified alignment, the misaligned access attempt (a memory read or write) generates a trap. The two possible responses to the trap are

The following default values only apply when no -xmemalign option is present:

Here is the default when -xmemalign option is present but no value is given:

The following table shows how you can use -xmemalign to handle different alignment situations.

Table B–29 Examples of -xmemalign

Command  

Situation  

-xmemalign=1s

There are many misaligned accesses so trap handling is too slow. 

-xmemalign=8i

There are occasional, intentional, misaligned accesses in code that is otherwise correct. 

-xmemalign=8s

There should be no misaligned accesses in the program. 

-xmemalign=2s

You want to check for possible odd-byte accesses. 

-xmemalign=2i

You want to check for possible odd-byte access and you want the program to work.