From a73021ef5e499fb4fcae763e4eecc5fa6ac47774 Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Tue, 6 Jun 2017 13:46:05 +0200
Subject: [PATCH] optimized bit ops for GP bits

---
 .../com/oracle/truffle/r/runtime/data/RBaseObject.java    | 8 ++++----
 .../com/oracle/truffle/r/runtime/data/RTypedValue.java    | 8 +++++---
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RBaseObject.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RBaseObject.java
index 20681ec6eb..52e181b7b4 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RBaseObject.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RBaseObject.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,16 +48,16 @@ abstract class RBaseObject implements RTypedValue {
 
     @Override
     public final boolean isS4() {
-        return (getGPBits() & S4_MASK) == S4_MASK;
+        return (getTypedValueInfo() & S4_MASK_SHIFTED) != 0;
     }
 
     @Override
     public final void setS4() {
-        setGPBits(getGPBits() | S4_MASK);
+        setTypedValueInfo(getTypedValueInfo() | S4_MASK_SHIFTED);
     }
 
     @Override
     public final void unsetS4() {
-        setGPBits(getGPBits() & ~S4_MASK);
+        setTypedValueInfo(getTypedValueInfo() & ~S4_MASK_SHIFTED);
     }
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypedValue.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypedValue.java
index 153949e45e..66a09ba041 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypedValue.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RTypedValue.java
@@ -27,6 +27,8 @@ public interface RTypedValue extends RTruffleObject {
     int GP_BITS_MASK_SHIFT = 8;
     int GP_BITS_MASK = 0xFFFF << GP_BITS_MASK_SHIFT;
 
+    int S4_MASK_SHIFTED = 1 << (4 + GP_BITS_MASK_SHIFT);
+
     RType getRType();
 
     int getTypedValueInfo();
@@ -42,14 +44,14 @@ public interface RTypedValue extends RTruffleObject {
     }
 
     default boolean isS4() {
-        return (getGPBits() & S4_MASK) == S4_MASK;
+        return (getTypedValueInfo() & S4_MASK_SHIFTED) != 0;
     }
 
     default void setS4() {
-        setGPBits(getGPBits() | S4_MASK);
+        setTypedValueInfo(getTypedValueInfo() | S4_MASK_SHIFTED);
     }
 
     default void unsetS4() {
-        setGPBits(getGPBits() & ~S4_MASK);
+        setTypedValueInfo(getTypedValueInfo() & ~S4_MASK_SHIFTED);
     }
 }
-- 
GitLab