blob: 1331774ca4be4f6aec8aca80d34099dcc5719419 [file] [log] [blame]
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* vim: set ts=8 sts=4 et sw=4 tw=99:
*
* Copyright 2015 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef asmjs_wasm_ion_compile_h
#define asmjs_wasm_ion_compile_h
#include "asmjs/AsmJSFrameIterator.h"
#include "asmjs/WasmCompileArgs.h"
#include "asmjs/WasmIR.h"
#include "jit/MacroAssembler.h"
namespace js {
namespace wasm {
class FunctionCompileResults
{
jit::TempAllocator alloc_;
jit::MacroAssembler masm_;
AsmJSFunctionOffsets offsets_;
unsigned compileTime_;
FunctionCompileResults(const FunctionCompileResults&) = delete;
FunctionCompileResults& operator=(const FunctionCompileResults&) = delete;
public:
explicit FunctionCompileResults(LifoAlloc& lifo)
: alloc_(&lifo),
masm_(jit::MacroAssembler::AsmJSToken(), &alloc_),
compileTime_(0)
{}
jit::TempAllocator& alloc() { return alloc_; }
jit::MacroAssembler& masm() { return masm_; }
AsmJSFunctionOffsets& offsets() { return offsets_; }
const AsmJSFunctionOffsets& offsets() const { return offsets_; }
void setCompileTime(unsigned t) { MOZ_ASSERT(!compileTime_); compileTime_ = t; }
unsigned compileTime() const { return compileTime_; }
};
class CompileTask
{
LifoAlloc lifo_;
const CompileArgs args_;
const FuncIR* func_;
mozilla::Maybe<FunctionCompileResults> results_;
CompileTask(const CompileTask&) = delete;
CompileTask& operator=(const CompileTask&) = delete;
public:
CompileTask(size_t defaultChunkSize, CompileArgs args)
: lifo_(defaultChunkSize),
args_(args),
func_(nullptr)
{}
LifoAlloc& lifo() {
return lifo_;
}
CompileArgs args() const {
return args_;
}
void init(const FuncIR& func) {
func_ = &func;
results_.emplace(lifo_);
}
const FuncIR& func() const {
MOZ_ASSERT(func_);
return *func_;
}
FunctionCompileResults& results() {
return *results_;
}
void reset() {
func_ = nullptr;
results_.reset();
lifo_.releaseAll();
}
};
bool
CompileFunction(CompileTask* task);
} // namespace wasm
} // namespace js
#endif // asmjs_wasm_ion_compile_h