diff src/cpu/x86/vm/graalRuntime_x86.cpp @ 8490:1567c6cc6561

Towards porting G1 WBs
author Christos Kotselidis <christos.kotselidis@oracle.com>
date Wed, 20 Feb 2013 16:15:43 +0100
parents 92d21814cf7b
children b089cde44076
line wrap: on
line diff
--- a/src/cpu/x86/vm/graalRuntime_x86.cpp	Tue Feb 19 17:57:14 2013 +0100
+++ b/src/cpu/x86/vm/graalRuntime_x86.cpp	Wed Feb 20 16:15:43 2013 +0100
@@ -1191,25 +1191,43 @@
       }
       __ ret(0);
       break;
-    }
-    case graal_g1_wb_slow_id: {
-          Register obj = j_rarg0;
-          {
-            GraalStubFrame f(sasm, "graal_g1_wb_slow", dont_gc_arguments);
-            OopMap* map = save_live_registers(sasm, 2, save_fpu_registers);
+   }
+   case graal_wb_pre_call_id: {
+      Register obj = j_rarg0;
+      {
+        GraalStubFrame f(sasm, "graal_wb_pre_call", dont_gc_arguments);
+        OopMap* map = save_live_registers(sasm, 2, save_fpu_registers);
+
+        // note: really a leaf routine but must setup last java sp
+        //       => use call_RT for now (speed can be improved by
+        //       doing last java sp setup manually)
+        int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_wb_pre_call), obj);
 
-            // note: really a leaf routine but must setup last java sp
-            //       => use call_RT for now (speed can be improved by
-            //       doing last java sp setup manually)
-            int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_g1_wb_slow), obj);
+        oop_maps = new OopMapSet();
+        oop_maps->add_gc_map(call_offset, map);
+        restore_live_registers(sasm, save_fpu_registers);
+      }
+      __ ret(0);
+      break;
+   }
+   case graal_wb_post_call_id: {
+      Register obj = j_rarg0;
+      {
+        GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments);
+        OopMap* map = save_live_registers(sasm, 2, save_fpu_registers);
 
-            oop_maps = new OopMapSet();
-            oop_maps->add_gc_map(call_offset, map);
-            restore_live_registers(sasm, save_fpu_registers);
-          }
-          __ ret(0);
-          break;
-        }
+        // note: really a leaf routine but must setup last java sp
+        //       => use call_RT for now (speed can be improved by
+        //       doing last java sp setup manually)
+        int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_wb_post_call), obj);
+
+        oop_maps = new OopMapSet();
+        oop_maps->add_gc_map(call_offset, map);
+        restore_live_registers(sasm, save_fpu_registers);
+      }
+      __ ret(0);
+      break;
+   }
    case graal_identity_hash_code_id: {
       Register obj = j_rarg0; // Incoming
       __ set_info("identity_hash_code", dont_gc_arguments);