OpenWatcom 1.7 出てたヨ。

Win32 版 C/C++ に関する限り、RC2 からの変更はまったくないと思われます。(インストーラの exe がバイナリ完全一致)。

変更点は例によって訳してみた(なんかだいぶ適当にやってしまった気が…)。個人的には以下のバグ修正がけっこう驚いた。

  • cdecl 呼び出し規約の互換性に問題があった。
  • Win32 の stat がバグってた(当方の言語処理能力の不具合により原文の説明がうまく訳せなかったので、適当に意訳して説明を補填してしまった)

ちなみに cdecl の不具合。たとえば

double __cdecl test(void)
{
    return 1;
}

これをコンパイル&逆アセ(wcl386 -c -s test.c && wdis test.obj -a)すると、以前の OpenWatcom ではこんな感じ(OpenWatcom 1.3)。

.387
.386p
.model flat
		PUBLIC	_test
DGROUP		GROUP	CONST,CONST2,_DATA
_TEXT		SEGMENT	BYTE PUBLIC USE32 'CODE'
		ASSUME CS:_TEXT, DS:DGROUP, SS:DGROUP
_test:
    mov         eax,offset FLAT:L$1
    xor         edx,edx
    mov         dword ptr FLAT:L$1,edx
    mov         dword ptr FLAT:L$2,3ff00000H
    ret         
_TEXT		ENDS
CONST		SEGMENT	DWORD PUBLIC USE32 'DATA'
L$1:
    DB	0, 0, 0, 0
L$2:
    DB	0, 0, 0, 0

CONST		ENDS
CONST2		SEGMENT	DWORD PUBLIC USE32 'DATA'
CONST2		ENDS
_DATA		SEGMENT	DWORD PUBLIC USE32 'DATA'
_DATA		ENDS
		END

で、1.7 だとこんな感じ。

.387
.386p
		PUBLIC	_test
		EXTRN	__8087:BYTE
		EXTRN	__init_387_emulator:BYTE
DGROUP		GROUP	CONST,CONST2,_DATA
_TEXT		SEGMENT	BYTE PUBLIC USE32 'CODE'
		ASSUME CS:_TEXT, DS:DGROUP, SS:DGROUP
_test:
    fld1        
    ret         
_TEXT		ENDS
CONST		SEGMENT	DWORD PUBLIC USE32 'DATA'
CONST		ENDS
CONST2		SEGMENT	DWORD PUBLIC USE32 'DATA'
CONST2		ENDS
_DATA		SEGMENT	DWORD PUBLIC USE32 'DATA'
_DATA		ENDS
		END

ついでに mingwgcc 3.3.3 (gcc -S -fomit-frame-pointer test.c)

	.file	"test.c"
	.text
.globl _test
	.def	_test;	.scl	2;	.type	32;	.endef
_test:
	fld1
	ret

ついでなんで Borland C++ 5.5.1 でもやってみたヨ(bcc32 -S test.c デバッグ情報とコメントは長いので削除した)

	.386p
	model flat
_TEXT	segment dword public use32 'CODE'
_TEXT	ends
_DATA	segment dword public use32 'DATA'
_DATA	ends
_BSS	segment dword public use32 'BSS'
_BSS	ends
DGROUP	group	_BSS,_DATA
_TEXT	segment dword public use32 'CODE'
_test	proc	near
	push      ebp
	mov       ebp,esp
@1:
	fld       qword ptr [@2]
@4:
@3:
	pop       ebp
	ret 
	align 4        
@2:
	db        0,0,0,0,0,0,240,63
_test	endp
_TEXT	ends
	public	_test
	end

fld1 してくれないあたりがボーランドだな、とか微妙にオチがついたような気分になってしまったり。