[WTF] Import std::optional reference implementation as WTF::Optional
[WebKit-https.git] / Source / JavaScriptCore / b3 / B3StackmapSpecial.h
index ff7d29b..97a0813 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2016 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -23,8 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef B3StackmapSpecial_h
-#define B3StackmapSpecial_h
+#pragma once
 
 #if ENABLE(B3_JIT)
 
@@ -47,19 +46,21 @@ public:
 
     enum RoleMode : int8_t {
         SameAsRep,
+        ForceLateUseUnlessRecoverable,
         ForceLateUse
     };
 
 protected:
     void reportUsedRegisters(Air::Inst&, const RegisterSet&) override;
-    const RegisterSet& extraEarlyClobberedRegs(Air::Inst&) override;
-    const RegisterSet& extraClobberedRegs(Air::Inst&) override;
+    RegisterSet extraEarlyClobberedRegs(Air::Inst&) override;
+    RegisterSet extraClobberedRegs(Air::Inst&) override;
 
     // Note that this does not override generate() or dumpImpl()/deepDumpImpl(). We have many some
     // subclasses that implement that.
     void forEachArgImpl(
         unsigned numIgnoredB3Args, unsigned numIgnoredAirArgs,
-        Air::Inst&, RoleMode, const ScopedLambda<Air::Inst::EachArgCallback>&);
+        Air::Inst&, RoleMode, std::optional<unsigned> firstRecoverableIndex,
+        const ScopedLambda<Air::Inst::EachArgCallback>&);
     
     bool isValidImpl(
         unsigned numIgnoredB3Args, unsigned numIgnoredAirArgs,
@@ -69,7 +70,8 @@ protected:
         Air::Inst&, unsigned argIndex);
 
     // Appends the reps for the Inst's args, starting with numIgnoredArgs, to the given vector.
-    void appendRepsImpl(Air::GenerationContext&, unsigned numIgnoredArgs, Air::Inst&, Vector<ValueRep>&);
+    Vector<ValueRep> repsImpl(
+        Air::GenerationContext&, unsigned numIgnoredB3Args, unsigned numIgnoredAirArgs, Air::Inst&);
 
     static bool isArgValidForValue(const Air::Arg&, Value*);
     static bool isArgValidForRep(Air::Code&, const Air::Arg&, const ValueRep&);
@@ -85,6 +87,3 @@ void printInternal(PrintStream&, JSC::B3::StackmapSpecial::RoleMode);
 } // namespace WTF
 
 #endif // ENABLE(B3_JIT)
-
-#endif // B3StackmapSpecial_h
-