Mercurial > hg > truffle
comparison src/share/vm/runtime/sharedRuntime.hpp @ 14418:cfd05ec74089
8024342: PPC64 (part 111): Support for C calling conventions that require 64-bit ints.
Summary: Some platforms, as ppc and s390x/zArch require that 32-bit ints are passed as 64-bit values to C functions. This change adds support to adapt the signature and to issue proper casts to c2-compiled stubs. The functions are used in generate_native_wrapper(). Adapt signature used by the compiler as in PhaseIdealLoop::intrinsify_fill().
Reviewed-by: kvn
author | goetz |
---|---|
date | Wed, 18 Sep 2013 14:34:56 -0700 |
parents | 6a936747b569 |
children | 1174c8abbdb6 |
comparison
equal
deleted
inserted
replaced
14417:f3806614494a | 14418:cfd05ec74089 |
---|---|
364 // NULL is being passed as the second VMRegPair array, so arguments are either | 364 // NULL is being passed as the second VMRegPair array, so arguments are either |
365 // passed in a register OR in a stack slot. | 365 // passed in a register OR in a stack slot. |
366 static int c_calling_convention(const BasicType *sig_bt, VMRegPair *regs, VMRegPair *regs2, | 366 static int c_calling_convention(const BasicType *sig_bt, VMRegPair *regs, VMRegPair *regs2, |
367 int total_args_passed); | 367 int total_args_passed); |
368 | 368 |
369 // Compute the new number of arguments in the signature if 32 bit ints | |
370 // must be converted to longs. Needed if CCallingConventionRequiresIntsAsLongs | |
371 // is true. | |
372 static int convert_ints_to_longints_argcnt(int in_args_count, BasicType* in_sig_bt); | |
373 // Adapt a method's signature if it contains 32 bit integers that must | |
374 // be converted to longs. Needed if CCallingConventionRequiresIntsAsLongs | |
375 // is true. | |
376 static void convert_ints_to_longints(int i2l_argcnt, int& in_args_count, | |
377 BasicType*& in_sig_bt, VMRegPair*& in_regs); | |
378 | |
369 // Generate I2C and C2I adapters. These adapters are simple argument marshalling | 379 // Generate I2C and C2I adapters. These adapters are simple argument marshalling |
370 // blobs. Unlike adapters in the tiger and earlier releases the code in these | 380 // blobs. Unlike adapters in the tiger and earlier releases the code in these |
371 // blobs does not create a new frame and are therefore virtually invisible | 381 // blobs does not create a new frame and are therefore virtually invisible |
372 // to the stack walking code. In general these blobs extend the callers stack | 382 // to the stack walking code. In general these blobs extend the callers stack |
373 // as needed for the conversion of argument locations. | 383 // as needed for the conversion of argument locations. |
376 // by the time we reach the blob there is compiled code available. This allows | 386 // by the time we reach the blob there is compiled code available. This allows |
377 // the blob to pass the incoming stack pointer (the sender sp) in a known | 387 // the blob to pass the incoming stack pointer (the sender sp) in a known |
378 // location for the interpreter to record. This is used by the frame code | 388 // location for the interpreter to record. This is used by the frame code |
379 // to correct the sender code to match up with the stack pointer when the | 389 // to correct the sender code to match up with the stack pointer when the |
380 // thread left the compiled code. In addition it allows the interpreter | 390 // thread left the compiled code. In addition it allows the interpreter |
381 // to remove the space the c2i adapter allocated to do it argument conversion. | 391 // to remove the space the c2i adapter allocated to do its argument conversion. |
382 | 392 |
383 // Although a c2i blob will always run interpreted even if compiled code is | 393 // Although a c2i blob will always run interpreted even if compiled code is |
384 // present if we see that compiled code is present the compiled call site | 394 // present if we see that compiled code is present the compiled call site |
385 // will be patched/re-resolved so that later calls will run compiled. | 395 // will be patched/re-resolved so that later calls will run compiled. |
386 | 396 |