Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
Несмотря на определённый прогресс в обработке 64-разрядных множеств в компиляторе, генерируемый "объектный" файл стал каким-то другим. Вероятно, что где-то в него вставляются "литералы" множеств, и, поскольку их размер изменился, что-то в формате "поехало". Поэтому в целом пока ничего не работает.
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
Вроде заработали IN и INCL для 64-разрядных множеств, но литералы множеств по-прежнему не работают.
Причём теперь сломались и для остальных разрядностей .
Поскольку литералы множеств реализованы, как можно догадаться, через литералы множеств,
получается некий порочный круг. Один раз как-то получилось, что всё работало но
пересборка не удалась и это состояние теперь не получается воспроизвести.
Глиссада, по которой на него нужно заходить, утрачена. Теперь надо подумать...
Ночью во сне само как-нибудь подумается.
Причём теперь сломались и для остальных разрядностей .
Поскольку литералы множеств реализованы, как можно догадаться, через литералы множеств,
получается некий порочный круг. Один раз как-то получилось, что всё работало но
пересборка не удалась и это состояние теперь не получается воспроизвести.
Глиссада, по которой на него нужно заходить, утрачена. Теперь надо подумать...
Ночью во сне само как-нибудь подумается.
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
При добавлении s64 + s32 или s64 + s8 старшие биты множества s64 обнуляются. И дело здесь именно в сложении с множеством другой разрядности. Значит, надо копать (и допиливать) реализацию сложения.
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
Похоже, что при сложении множества приводятся к 32-разрядному...
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
И это были не глисты, а сделал это я. Потому что я сказал, что множества совместимы по присваиванию в обе стороны, в результате чего больший тип стал приводиться к меньшему. Разобраться в очередной раз помог "разврат мозга".
Теперь тест проходит, но передача параметра {1} в процедуру, ожидающую SET32, не компилируется. Это надо исправлять, т.к. без этого ЯОС не соберётся (даже компилятор Лис не соберётся).
Теперь тест проходит, но передача параметра {1} в процедуру, ожидающую SET32, не компилируется. Это надо исправлять, т.к. без этого ЯОС не соберётся (даже компилятор Лис не соберётся).
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
Код: Выделить всё
DoNoConstSetExpr:
codeOffset = 0000088AH
0000088AH 55 PUSH EBP
0000088BH 89 E5 MOV EBP, ESP
0000088DH 6A 00 PUSH 0
0000088FH 31 C0 XOR EAX, EAX
00000891H 50 PUSH EAX
00000892H 50 PUSH EAX
00000893H 50 PUSH EAX
00000894H C7 45 FC 1C C9 53 14 MOV -4[EBP], 341035292
0000089BH BF 00 00 00 00 MOV EDI, 0
000008A0H BE 00 00 00 00 MOV ESI, 0
000008A5H 56 PUSH ESI
000008A6H 57 PUSH EDI
000008A7H 6A 01 PUSH 1
000008A9H 55 PUSH EBP
000008AAH E8 83 00 00 00 CALL 131 (00000932H)
000008AFH 83 C4 08 ADD ESP, 8
000008B2H 89 C3 MOV EBX, EAX
000008B4H 5F POP EDI
000008B5H 5E POP ESI
000008B6H 89 DA MOV EDX, EBX
000008B8H 31 C9 XOR ECX, ECX
;;; Проверка на диапазон элемента множества, к-рый мы хотим добавить (он в EDX, а что с ECX - я не понял).
000008BAH 81 F9 00 00 00 00 CMP ECX, 0
000008C0H 0F 82 11 00 00 00 JB 17 (000008D7H)
000008C6H 77 0C JNBE 12 (000008D4H)
000008C8H 81 FA 3F 00 00 00 CMP EDX, 63
000008CEH 0F 86 03 00 00 00 JBE 3 (000008D7H)
000008D4H 6A 0B PUSH 11
000008D6H CC INT 3
;;; проверка прошла
000008D7H 56 PUSH ESI
000008D8H 57 PUSH EDI
000008D9H 6A 00 PUSH 0
000008DBH 6A 01 PUSH 1
000008DDH 51 PUSH ECX
000008DEH 52 PUSH EDX
000008DFH E8 90 5A EC EB CALL -336831856 (EBEC6374H) ; LSH, но похоже, что опять впихнул туда 64-разрядное число вместо 32-разрядного
; видимо, в этом и ошибка...
000008E4H 83 C4 10 ADD ESP, 16
000008E7H 92 XCHG EAX, EDX
000008E8H 89 C1 MOV ECX, EAX
000008EAH 5F POP EDI
000008EBH 5E POP ESI
000008ECH 09 D7 OR EDI, EDX
000008EEH 09 CE OR ESI, ECX
000008F0H 89 7D F4 MOV -12[EBP], EDI
000008F3H 89 75 F8 MOV -8[EBP], ESI
000008F6H 81 7D F8 00 00 00 00 CMP -8[EBP], 0
000008FDH 75 0D JNZ 13 (0000090CH)
000008FFH 81 7D F4 02 00 00 00 CMP -12[EBP], 2
00000906H 0F 84 03 00 00 00 JZ 3 (0000090FH)
0000090CH 6A 08 PUSH 8
0000090EH CC INT 3
0000090FH 89 EC MOV ESP, EBP
00000911H 5D POP EBP
00000912H C3 RET
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
Теперь лис способен пересобрать сам себя, но релиз пересобрать он не может. И похоже, что работа с конструкторами множеств вида {неКонстанта1..неКонстанта2} ещё не завершена.
Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной
А кстати, чтобы тема завершилась на хорошей ноте - всё починилось, часть тестов падает, однако сами операционки новым компилятором запускаются - Win32, Win64, Linux64, BIOS32. Поставленная задача решена.