Mercurial > hg > CbC > CbC_llvm
comparison docs/StackMaps.rst @ 95:afa8332a0e37 LLVM3.8
LLVM 3.8
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Oct 2015 17:48:58 +0900 |
parents | 60c9769439b8 |
children | 1172e4bd9c6f |
comparison
equal
deleted
inserted
replaced
84:f3e34b893a5f | 95:afa8332a0e37 |
---|---|
219 is not a constant null. The function call and its arguments are | 219 is not a constant null. The function call and its arguments are |
220 lowered according to the calling convention specified at the | 220 lowered according to the calling convention specified at the |
221 intrinsic's callsite. Variants of the intrinsic with non-void return | 221 intrinsic's callsite. Variants of the intrinsic with non-void return |
222 type also return a value according to calling convention. | 222 type also return a value according to calling convention. |
223 | 223 |
224 On PowerPC, note that ``<target>`` must be the actual intended target of | 224 On PowerPC, note that ``<target>`` must be the ABI function pointer for the |
225 the indirect call. Specifically, even when compiling for the ELF V1 ABI, | 225 intended target of the indirect call. Specifically, when compiling for the |
226 ``<target>`` is not the function-descriptor address normally used as the C/C++ | 226 ELF V1 ABI, ``<target>`` is the function-descriptor address normally used as |
227 function-pointer representation. As a result, the call target must be local | 227 the C/C++ function-pointer representation. |
228 because no adjustment or restoration of the TOC pointer (in register r2) will | |
229 be performed. | |
230 | 228 |
231 Requesting zero patch point arguments is valid. In this case, all | 229 Requesting zero patch point arguments is valid. In this case, all |
232 variable operands are handled just like | 230 variable operands are handled just like |
233 ``llvm.experimental.stackmap.*``. The difference is that space will | 231 ``llvm.experimental.stackmap.*``. The difference is that space will |
234 still be reserved for patching, a call will be emitted, and a return | 232 still be reserved for patching, a call will be emitted, and a return |
499 specially when they are directly consumed by an intrinsics. (This is | 497 specially when they are directly consumed by an intrinsics. (This is |
500 the same requirement imposed by the llvm.gcroot intrinsic.) LLVM | 498 the same requirement imposed by the llvm.gcroot intrinsic.) LLVM |
501 transformations must not substitute the alloca with any intervening | 499 transformations must not substitute the alloca with any intervening |
502 value. This can be verified by the runtime simply by checking that the | 500 value. This can be verified by the runtime simply by checking that the |
503 stack map's location is a Direct location type. | 501 stack map's location is a Direct location type. |
502 | |
503 | |
504 Supported Architectures | |
505 ======================= | |
506 | |
507 Support for StackMap generation and the related intrinsics requires | |
508 some code for each backend. Today, only a subset of LLVM's backends | |
509 are supported. The currently supported architectures are X86_64, | |
510 PowerPC, and Aarch64. | |
511 |