[Development] V4 porting
Dmitriy -
dima00782 at gmail.com
Thu Dec 24 14:11:17 CET 2015
One more question:
qt-5.5.1/qtdeclarative/src/qml/jit/qv4assembler_p.h
// V4 uses two stacks: one stack with QV4::Value items, which is
checked by the garbage
// collector, and one stack used by the native C/C++/ABI code.
This C++ stack is not scanned
// by the garbage collector, so if any JS object needs to be
retained, it should be put on the
// JS stack.
//
// The "saved reg arg X" are on the C++ stack is used to store
values in registers that need to
// be passed by reference to native functions. It is fine to use
the C++ stack, because only
// non-object values can be stored in registers.
//
// Stack layout for the C++ stack:
// return address
// old FP <- FP
// callee saved reg n
// ...
// callee saved reg 0
// saved reg arg n
// ...
// saved reg arg 0 <- SP
//
// Stack layout for the JS stack:
// function call argument n <- LocalsRegister
// ...
// function call argument 0
// local 0
// ...
// local n
// First save any arguments that reside in registers, because they
could be overwritten
// if that register is also used to pass arguments.
saveOutRegister<5>(arg6);
saveOutRegister<4>(arg5);
saveOutRegister<3>(arg4);
saveOutRegister<2>(arg3);
saveOutRegister<1>(arg2);
saveOutRegister<0>(arg1);
...
What kind of stack use for saving registers? Is it c++/ABI stack (I
hope) or Js stack?
On Thu, Dec 24, 2015 at 5:42 PM, Dmitriy - <dima00782 at gmail.com> wrote:
> Thank.
> I want to port JIT. Where should I start?
> You have any roadmap for this?
>
> Now I'm using qmljs tool for testing purpose.
> I has seen in qt-5.5.1/qtdeclarative/src/qml/jsruntime/qv4script.cpp:
>
> Script::parse():
>
> ...
>
> RuntimeCodegen cg(v4, strictMode);
>
> cg.generateFromProgram(sourceFile, sourceCode, program, &module, QQmlJS::Codegen::EvalCode, inheritedLocals);
>
> if (v4->hasException) return;
>
> QV4::Compiler::JSUnitGenerator jsGenerator(&module);
>
> QScopedPointer<EvalInstructionSelection> isel(...);
>
> ...
>
> QQmlRefPointer<QV4::CompiledData::CompilationUnit> compilationUnit = isel->compile();
>
> vmFunction = compilationUnit->linkToEngine(v4);
>
> ...
>
>
> Why do you compile script while parse it? Do you use AOT compiling?
>
>
> On Thu, Dec 24, 2015 at 5:18 PM, Hausmann Simon <
> Simon.Hausmann at theqtcompany.com> wrote:
>
>> Hi,
>>
>> Moth is the portable interpreter that will be used instead of the
>> just-in-time compiler if your platform doesn't support it. It should be
>> chosen automatically for you according to the #ifdefs in qv4global_p.h.
>>
>> So if you have qtbase compiling, then qml should also work. If you want
>> things to run faster, then you will have to port the JIT.
>>
>> Simon
>>
>> *From: *Dmitriy -
>> *Sent: *Thursday, December 24, 2015 10:47
>> *To: *development at qt-project.org
>> *Subject: *[Development] V4 porting
>>
>> Hi!
>> I want to port v4 engine to the new platform. The platform is Linux OS
>> and new processor. The processor looks like intel itanium. It is VLIW and
>> EPIC.
>> I have a c++/c compilers for the new architecture.
>>
>> I want to design qt quic qml application for the new platform. As a can
>> see in code, I need v4vm backend for this purpose.
>>
>> I'm see this:
>>
>> case use_moth: {
>> QV4::EvalISelFactory* iSelFactory = 0;
>> if (mode == use_moth) {
>> iSelFactory = new QV4::Moth::ISelFactory;#ifdef V4_ENABLE_JIT
>> } else {
>> iSelFactory = new QV4::JIT::ISelFactory;#endif // V4_ENABLE_JIT
>> }
>>
>> QV4::ExecutionEngine vm(iSelFactory);
>>
>> QV4::Scope scope(&vm);
>> QV4::ScopedContext ctx(scope, vm.rootContext());
>>
>> As I understand v4vm has two backends - Moth and Masm.
>>
>> What is Moth?
>>
>> --
>> Regards,
>> Dmitry Bezheckov.
>>
>
>
>
> --
> Regards,
> Dmitry Bezheckov.
>
--
Regards,
Dmitry Bezheckov.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20151224/9b2e9eac/attachment.html>
More information about the Development
mailing list