Да, вот именно так у меня и было. Работало. Но таким способом получается хороший код для простых процессоров, а, например, для x86 или ARM с их заковыристыми адресациями такой метод просто не видит операции, они "рассыпаются" в псевдокоде. Или же программу надо писать "простыми словами", а не вот так
Надо что-то изменить в структуре псевдокода, пока не пойму что.Код:if node^.nodeargs[i]^.resulttype<>nil then typ1:=node^.nodeargs[i]^.resulttype^ else begin typ1.flags:=node^.nodeargs[i]^.resulttypeflag; typ1.size:=4; end;
---------- Post added at 00:11 ---------- Previous post was at 00:01 ----------
Кодогенератор FPC вообще жжот, для надёжности проверяет индекс массива два разаи копирует один байт при помощи movsb:
Код:# [210] typ1.flags:=node^.nodeargs[i]^.resulttypeflag; movzbl -860(%ebp),%eax decl %eax cmpl $9,%eax jbe .Lj3685 call FPC_RANGEERROR .Lj3685: movzbl -860(%ebp),%eax movl %eax,%edx decl %eax cmpl $9,%eax jbe .Lj3686 call FPC_RANGEERROR .Lj3686: movl -884(%ebp),%ecx movl 12(%ecx,%edx,4),%eax leal -40(%ebp),%edi leal 69(%eax),%esi cld movsb




и копирует один байт при помощи movsb:
Ответить с цитированием