Как Вы снова использовали бы реализации кода операции C при записи JIT с LLVM?

Попробуйте это:

    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.FragmentToBeReplaced,theFragmentToBeAdded);
    ft.commit();
7
задан joeforker 2 February 2009 в 19:33
поделиться

1 ответ

Хорошо, сначала возьмите все свои фрагменты кода и осуществите рефакторинг их в их собственные функции. Таким образом, Ваш код переходит в:

void addOpcode(uint32_t *result, uint32_t L, uint32_t R) {
    *result = L + R;
}

switch (opcode) {
    case ADD:
            addOpcode(&result, L, R);
            break;
     ....

Хорошо, поэтому после выполнения этого Вашего интерпретатора должен все еще работать. Теперь возьмите все новые функции и разместите их в их собственный файл. Теперь скомпилируйте тот файл с помощью или llvm-gcc или лязга, и вместо того, чтобы сгенерировать собственный код компилируют его с помощью "cpp" бэкенда (-идут-cpp). Это сгенерирует код C++, который инстанцирует кода байта для единицы компиляции. Можно указать опции ограничить его определенными функциями и т.д. Вы, вероятно, хотите использовать "-cppgen модуль".

Теперь отступите, Ваш цикл интерпретатора склеивают вызовы к сгенерированному коду C++ вместо того, чтобы непосредственно выполнить исходный код, затем передают его некоторым оптимизаторам и собственному генератору кода. Gratz на JIT ;-) Вы видите пример этого в нескольких проектах LLVM, как vm_ops в llvm-lua.

9
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: