Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 25.10.20 01:47

Несмотря на определённый прогресс в обработке 64-разрядных множеств в компиляторе, генерируемый "объектный" файл стал каким-то другим. Вероятно, что где-то в него вставляются "литералы" множеств, и, поскольку их размер изменился, что-то в формате "поехало". Поэтому в целом пока ничего не работает.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 27.10.20 03:55

Вроде заработали IN и INCL для 64-разрядных множеств, но литералы множеств по-прежнему не работают.

Причём теперь сломались и для остальных разрядностей .

Поскольку литералы множеств реализованы, как можно догадаться, через литералы множеств,
получается некий порочный круг. Один раз как-то получилось, что всё работало но
пересборка не удалась и это состояние теперь не получается воспроизвести.
Глиссада, по которой на него нужно заходить, утрачена. Теперь надо подумать...

Ночью во сне само как-нибудь подумается.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 28.10.20 15:20

При добавлении s64 + s32 или s64 + s8 старшие биты множества s64 обнуляются. И дело здесь именно в сложении с множеством другой разрядности. Значит, надо копать (и допиливать) реализацию сложения.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 28.10.20 15:24

Похоже, что при сложении множества приводятся к 32-разрядному...

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 28.10.20 23:32

И это были не глисты, а сделал это я. Потому что я сказал, что множества совместимы по присваиванию в обе стороны, в результате чего больший тип стал приводиться к меньшему. Разобраться в очередной раз помог "разврат мозга".

Теперь тест проходит, но передача параметра {1} в процедуру, ожидающую SET32, не компилируется. Это надо исправлять, т.к. без этого ЯОС не соберётся (даже компилятор Лис не соберётся).

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 29.10.20 00:38

Код: Выделить всё

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		

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 29.10.20 01:25

Теперь лис способен пересобрать сам себя, но релиз пересобрать он не может. И похоже, что работа с конструкторами множеств вида {неКонстанта1..неКонстанта2} ещё не завершена.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: Пытаемся починить сборку 64-разрядной платформы из 32-разрядной

Сообщение БудДен » 06.11.20 18:48

А кстати, чтобы тема завершилась на хорошей ноте - всё починилось, часть тестов падает, однако сами операционки новым компилятором запускаются - Win32, Win64, Linux64, BIOS32. Поставленная задача решена.

Ответить