473 #define NOT_ARM32(code)
474 #else
475 #define ARM32_ONLY(code)
476 #define NOT_ARM32(code) code
477 #endif
478
479 #ifdef AARCH64
480 #define AARCH64_ONLY(code) code
481 #define NOT_AARCH64(code)
482 #else
483 #define AARCH64_ONLY(code)
484 #define NOT_AARCH64(code) code
485 #endif
486
487 #define define_pd_global(type, name, value) const type pd_##name = value;
488
489 // Helper macros for constructing file names for includes.
490 #define CPU_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_CPU)
491 #define OS_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_OS)
492 #define OS_CPU_HEADER_STEM(basename) PASTE_TOKENS(basename, PASTE_TOKENS(INCLUDE_SUFFIX_OS, INCLUDE_SUFFIX_CPU))
493
494 // Include platform dependent files.
495 //
496 // This macro constructs from basename and INCLUDE_SUFFIX_OS /
497 // INCLUDE_SUFFIX_CPU, which are set on the command line, the name of
498 // platform dependent files to be included.
499 // Example: INCLUDE_SUFFIX_OS=_linux / INCLUDE_SUFFIX_CPU=_sparc
500 // CPU_HEADER_INLINE(macroAssembler) --> macroAssembler_sparc.inline.hpp
501 // OS_CPU_HEADER(vmStructs) --> vmStructs_linux_sparc.hpp
502 //
503 // basename<cpu>.hpp / basename<cpu>.inline.hpp
504 #define CPU_HEADER_H(basename) XSTR(CPU_HEADER_STEM(basename).h)
505 #define CPU_HEADER(basename) XSTR(CPU_HEADER_STEM(basename).hpp)
506 #define CPU_HEADER_INLINE(basename) XSTR(CPU_HEADER_STEM(basename).inline.hpp)
507 // basename<os>.hpp / basename<os>.inline.hpp
508 #define OS_HEADER_H(basename) XSTR(OS_HEADER_STEM(basename).h)
509 #define OS_HEADER(basename) XSTR(OS_HEADER_STEM(basename).hpp)
510 #define OS_HEADER_INLINE(basename) XSTR(OS_HEADER_STEM(basename).inline.hpp)
511 // basename<os><cpu>.hpp / basename<os><cpu>.inline.hpp
512 #define OS_CPU_HEADER(basename) XSTR(OS_CPU_HEADER_STEM(basename).hpp)
513 #define OS_CPU_HEADER_INLINE(basename) XSTR(OS_CPU_HEADER_STEM(basename).inline.hpp)
514
515 // To use Atomic::inc(jshort* dest) and Atomic::dec(jshort* dest), the address must be specially
516 // aligned, such that (*dest) occupies the upper 16 bits of an aligned 32-bit word. The best way to
517 // achieve is to place your short value next to another short value, which doesn't need atomic ops.
518 //
519 // Example
520 // ATOMIC_SHORT_PAIR(
521 // volatile short _refcount, // needs atomic operation
522 // unsigned short _length // number of UTF8 characters in the symbol (does not need atomic op)
523 // );
524
525 #ifdef VM_LITTLE_ENDIAN
526 #define ATOMIC_SHORT_PAIR(atomic_decl, non_atomic_decl) \
527 non_atomic_decl; \
528 atomic_decl
529 #else
530 #define ATOMIC_SHORT_PAIR(atomic_decl, non_atomic_decl) \
531 atomic_decl; \
532 non_atomic_decl
533 #endif
|
473 #define NOT_ARM32(code)
474 #else
475 #define ARM32_ONLY(code)
476 #define NOT_ARM32(code) code
477 #endif
478
479 #ifdef AARCH64
480 #define AARCH64_ONLY(code) code
481 #define NOT_AARCH64(code)
482 #else
483 #define AARCH64_ONLY(code)
484 #define NOT_AARCH64(code) code
485 #endif
486
487 #define define_pd_global(type, name, value) const type pd_##name = value;
488
489 // Helper macros for constructing file names for includes.
490 #define CPU_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_CPU)
491 #define OS_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_OS)
492 #define OS_CPU_HEADER_STEM(basename) PASTE_TOKENS(basename, PASTE_TOKENS(INCLUDE_SUFFIX_OS, INCLUDE_SUFFIX_CPU))
493 #define TARGET_COMPILER_HEADER_STEM(basename) PASTE_TOKENS(basename, INCLUDE_SUFFIX_TARGET_COMPILER)
494
495 // Include platform dependent files.
496 //
497 // This macro constructs from basename and INCLUDE_SUFFIX_OS /
498 // INCLUDE_SUFFIX_CPU / INCLUDE_SUFFIX_TARGET_COMPILER, which are set on
499 // the command line, the name of platform dependent files to be included.
500 // Example: INCLUDE_SUFFIX_OS=_linux / INCLUDE_SUFFIX_CPU=_sparc
501 // CPU_HEADER_INLINE(macroAssembler) --> macroAssembler_sparc.inline.hpp
502 // OS_CPU_HEADER(vmStructs) --> vmStructs_linux_sparc.hpp
503 //
504 // basename<cpu>.hpp / basename<cpu>.inline.hpp
505 #define CPU_HEADER_H(basename) XSTR(CPU_HEADER_STEM(basename).h)
506 #define CPU_HEADER(basename) XSTR(CPU_HEADER_STEM(basename).hpp)
507 #define CPU_HEADER_INLINE(basename) XSTR(CPU_HEADER_STEM(basename).inline.hpp)
508 // basename<os>.hpp / basename<os>.inline.hpp
509 #define OS_HEADER_H(basename) XSTR(OS_HEADER_STEM(basename).h)
510 #define OS_HEADER(basename) XSTR(OS_HEADER_STEM(basename).hpp)
511 #define OS_HEADER_INLINE(basename) XSTR(OS_HEADER_STEM(basename).inline.hpp)
512 // basename<os><cpu>.hpp / basename<os><cpu>.inline.hpp
513 #define OS_CPU_HEADER(basename) XSTR(OS_CPU_HEADER_STEM(basename).hpp)
514 #define OS_CPU_HEADER_INLINE(basename) XSTR(OS_CPU_HEADER_STEM(basename).inline.hpp)
515 // basename<compiler>.hpp / basename<compiler>.inline.hpp
516 #define TARGET_COMPILER_HEADER(basename) XSTR(TARGET_COMPILER_HEADER_STEM(basename).hpp)
517 #define TARGET_COMPILER_HEADER_INLINE(basename) XSTR(TARGET_COMPILER_HEADER_STEM(basename).inline.hpp)
518
519 // To use Atomic::inc(jshort* dest) and Atomic::dec(jshort* dest), the address must be specially
520 // aligned, such that (*dest) occupies the upper 16 bits of an aligned 32-bit word. The best way to
521 // achieve is to place your short value next to another short value, which doesn't need atomic ops.
522 //
523 // Example
524 // ATOMIC_SHORT_PAIR(
525 // volatile short _refcount, // needs atomic operation
526 // unsigned short _length // number of UTF8 characters in the symbol (does not need atomic op)
527 // );
528
529 #ifdef VM_LITTLE_ENDIAN
530 #define ATOMIC_SHORT_PAIR(atomic_decl, non_atomic_decl) \
531 non_atomic_decl; \
532 atomic_decl
533 #else
534 #define ATOMIC_SHORT_PAIR(atomic_decl, non_atomic_decl) \
535 atomic_decl; \
536 non_atomic_decl
537 #endif
|