[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Two build fixes for watcom compiler:

From: Ozkan Sezer
Subject: Re: Two build fixes for watcom compiler:
Date: Fri, 14 Jan 2022 17:47:36 +0300

On 1/14/22, Alexei Podtelezhnikov <> wrote:
>> #if defined(_MSC_VER) && defined(_M_IX86)
> I think this is appropriate, it makes it clear which compiler is intended.

OK, as you wish.

> As for `near`, I found the undefine option

Ah, nothing specific for near macro itself, but the standart '-U'
like many other compilers.

> Do you use any special build tools/scripts to insert it?

I use a makefile for os/2, so I can add -Unear to CFLAGS (tested
and works.)

> Finally, does Watcom have 64-bit types these days? We could insert it in

As of version 11.0, it supports long long: You can check like:
#if (__WATCOMC__ >= 1100)

It also supports __int64 but don't know as of which version.

> Do you know of any fast most-significnat-bit functions, like
> __builtin_clz, for Watcom?

You can inline-asm the bsr instruction with Watcom's aux pragma for
_BitScanReverse behavior, provided that you handle x==0 special case,
(replace uint32_t with unsigned long if you like). Like:

#if defined(__WATCOMC__) && defined(__386__)
extern __inline int _bsr_watcom(uint32_t);
#pragma aux _bsr_watcom = \
    "bsr eax, eax" \
    parm [eax] nomemory \
    value [eax] \
    modify exact [eax] nomemory;

Or, if you specifically want __builtin_clz-like behavior, here is a
version which xors the result with 31:
static __inline int _clz_watcom(uint32_t);
#pragma aux _clz_watcom = \
    "bsr eax, eax" \
    "xor eax, 31" \
    parm [eax] nomemory \
    value [eax] \
    modify exact [eax] nomemory;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]