Skip to content

Commit 257809d

Browse files
luhenryDavid Holmes
authored andcommitted
8248817: Windows: Improving common cross-platform code
Reviewed-by: kbarrett, dholmes
1 parent 7685e53 commit 257809d

File tree

5 files changed

+60
-513
lines changed

5 files changed

+60
-513
lines changed

src/hotspot/cpu/x86/stubGenerator_x86_32.cpp

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -429,38 +429,6 @@ class StubGenerator: public StubCodeGenerator {
429429
return start;
430430
}
431431

432-
433-
//----------------------------------------------------------------------------------------------------
434-
// Implementation of int32_t atomic_xchg(int32_t exchange_value, volatile int32_t* dest)
435-
// used by Atomic::xchg(volatile int32_t* dest, int32_t exchange_value)
436-
//
437-
// xchg exists as far back as 8086, lock needed for MP only
438-
// Stack layout immediately after call:
439-
//
440-
// 0 [ret addr ] <--- rsp
441-
// 1 [ ex ]
442-
// 2 [ dest ]
443-
//
444-
// Result: *dest <- ex, return (old *dest)
445-
//
446-
// Note: win32 does not currently use this code
447-
448-
address generate_atomic_xchg() {
449-
StubCodeMark mark(this, "StubRoutines", "atomic_xchg");
450-
address start = __ pc();
451-
452-
__ push(rdx);
453-
Address exchange(rsp, 2 * wordSize);
454-
Address dest_addr(rsp, 3 * wordSize);
455-
__ movl(rax, exchange);
456-
__ movptr(rdx, dest_addr);
457-
__ xchgl(rax, Address(rdx, 0));
458-
__ pop(rdx);
459-
__ ret(0);
460-
461-
return start;
462-
}
463-
464432
//----------------------------------------------------------------------------------------------------
465433
// Support for void verify_mxcsr()
466434
//
@@ -3797,9 +3765,6 @@ class StubGenerator: public StubCodeGenerator {
37973765
// is referenced by megamorphic call
37983766
StubRoutines::_catch_exception_entry = generate_catch_exception();
37993767

3800-
// These are currently used by Solaris/Intel
3801-
StubRoutines::_atomic_xchg_entry = generate_atomic_xchg();
3802-
38033768
// platform dependent
38043769
create_control_words();
38053770

src/hotspot/cpu/x86/stubGenerator_x86_64.cpp

Lines changed: 1 addition & 172 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -552,170 +552,6 @@ class StubGenerator: public StubCodeGenerator {
552552
return start;
553553
}
554554

555-
// Implementation of jint atomic_xchg(jint add_value, volatile jint* dest)
556-
// used by Atomic::xchg(volatile jint* dest, jint exchange_value)
557-
//
558-
// Arguments :
559-
// c_rarg0: exchange_value
560-
// c_rarg0: dest
561-
//
562-
// Result:
563-
// *dest <- ex, return (orig *dest)
564-
address generate_atomic_xchg() {
565-
StubCodeMark mark(this, "StubRoutines", "atomic_xchg");
566-
address start = __ pc();
567-
568-
__ movl(rax, c_rarg0); // Copy to eax we need a return value anyhow
569-
__ xchgl(rax, Address(c_rarg1, 0)); // automatic LOCK
570-
__ ret(0);
571-
572-
return start;
573-
}
574-
575-
// Implementation of intptr_t atomic_xchg(jlong add_value, volatile jlong* dest)
576-
// used by Atomic::xchg(volatile jlong* dest, jlong exchange_value)
577-
//
578-
// Arguments :
579-
// c_rarg0: exchange_value
580-
// c_rarg1: dest
581-
//
582-
// Result:
583-
// *dest <- ex, return (orig *dest)
584-
address generate_atomic_xchg_long() {
585-
StubCodeMark mark(this, "StubRoutines", "atomic_xchg_long");
586-
address start = __ pc();
587-
588-
__ movptr(rax, c_rarg0); // Copy to eax we need a return value anyhow
589-
__ xchgptr(rax, Address(c_rarg1, 0)); // automatic LOCK
590-
__ ret(0);
591-
592-
return start;
593-
}
594-
595-
// Support for jint atomic::atomic_cmpxchg(jint exchange_value, volatile jint* dest,
596-
// jint compare_value)
597-
//
598-
// Arguments :
599-
// c_rarg0: exchange_value
600-
// c_rarg1: dest
601-
// c_rarg2: compare_value
602-
//
603-
// Result:
604-
// if ( compare_value == *dest ) {
605-
// *dest = exchange_value
606-
// return compare_value;
607-
// else
608-
// return *dest;
609-
address generate_atomic_cmpxchg() {
610-
StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg");
611-
address start = __ pc();
612-
613-
__ movl(rax, c_rarg2);
614-
__ lock();
615-
__ cmpxchgl(c_rarg0, Address(c_rarg1, 0));
616-
__ ret(0);
617-
618-
return start;
619-
}
620-
621-
// Support for int8_t atomic::atomic_cmpxchg(int8_t exchange_value, volatile int8_t* dest,
622-
// int8_t compare_value)
623-
//
624-
// Arguments :
625-
// c_rarg0: exchange_value
626-
// c_rarg1: dest
627-
// c_rarg2: compare_value
628-
//
629-
// Result:
630-
// if ( compare_value == *dest ) {
631-
// *dest = exchange_value
632-
// return compare_value;
633-
// else
634-
// return *dest;
635-
address generate_atomic_cmpxchg_byte() {
636-
StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg_byte");
637-
address start = __ pc();
638-
639-
__ movsbq(rax, c_rarg2);
640-
__ lock();
641-
__ cmpxchgb(c_rarg0, Address(c_rarg1, 0));
642-
__ ret(0);
643-
644-
return start;
645-
}
646-
647-
// Support for int64_t atomic::atomic_cmpxchg(int64_t exchange_value,
648-
// volatile int64_t* dest,
649-
// int64_t compare_value)
650-
// Arguments :
651-
// c_rarg0: exchange_value
652-
// c_rarg1: dest
653-
// c_rarg2: compare_value
654-
//
655-
// Result:
656-
// if ( compare_value == *dest ) {
657-
// *dest = exchange_value
658-
// return compare_value;
659-
// else
660-
// return *dest;
661-
address generate_atomic_cmpxchg_long() {
662-
StubCodeMark mark(this, "StubRoutines", "atomic_cmpxchg_long");
663-
address start = __ pc();
664-
665-
__ movq(rax, c_rarg2);
666-
__ lock();
667-
__ cmpxchgq(c_rarg0, Address(c_rarg1, 0));
668-
__ ret(0);
669-
670-
return start;
671-
}
672-
673-
// Implementation of jint atomic_add(jint add_value, volatile jint* dest)
674-
// used by Atomic::add(volatile jint* dest, jint add_value)
675-
//
676-
// Arguments :
677-
// c_rarg0: add_value
678-
// c_rarg1: dest
679-
//
680-
// Result:
681-
// *dest += add_value
682-
// return *dest;
683-
address generate_atomic_add() {
684-
StubCodeMark mark(this, "StubRoutines", "atomic_add");
685-
address start = __ pc();
686-
687-
__ movl(rax, c_rarg0);
688-
__ lock();
689-
__ xaddl(Address(c_rarg1, 0), c_rarg0);
690-
__ addl(rax, c_rarg0);
691-
__ ret(0);
692-
693-
return start;
694-
}
695-
696-
// Implementation of intptr_t atomic_add(intptr_t add_value, volatile intptr_t* dest)
697-
// used by Atomic::add(volatile intptr_t* dest, intptr_t add_value)
698-
//
699-
// Arguments :
700-
// c_rarg0: add_value
701-
// c_rarg1: dest
702-
//
703-
// Result:
704-
// *dest += add_value
705-
// return *dest;
706-
address generate_atomic_add_long() {
707-
StubCodeMark mark(this, "StubRoutines", "atomic_add_long");
708-
address start = __ pc();
709-
710-
__ movptr(rax, c_rarg0); // Copy to eax we need a return value anyhow
711-
__ lock();
712-
__ xaddptr(Address(c_rarg1, 0), c_rarg0);
713-
__ addptr(rax, c_rarg0);
714-
__ ret(0);
715-
716-
return start;
717-
}
718-
719555
// Support for intptr_t OrderAccess::fence()
720556
//
721557
// Arguments :
@@ -6332,13 +6168,6 @@ address generate_avx_ghash_processBlocks() {
63326168
StubRoutines::_catch_exception_entry = generate_catch_exception();
63336169

63346170
// atomic calls
6335-
StubRoutines::_atomic_xchg_entry = generate_atomic_xchg();
6336-
StubRoutines::_atomic_xchg_long_entry = generate_atomic_xchg_long();
6337-
StubRoutines::_atomic_cmpxchg_entry = generate_atomic_cmpxchg();
6338-
StubRoutines::_atomic_cmpxchg_byte_entry = generate_atomic_cmpxchg_byte();
6339-
StubRoutines::_atomic_cmpxchg_long_entry = generate_atomic_cmpxchg_long();
6340-
StubRoutines::_atomic_add_entry = generate_atomic_add();
6341-
StubRoutines::_atomic_add_long_entry = generate_atomic_add_long();
63426171
StubRoutines::_fence_entry = generate_orderaccess_fence();
63436172

63446173
// platform dependent

0 commit comments

Comments
 (0)