Re: tidy binaries
Cory Nelson <[email protected]> Fri, 27 May 2005 11:28:48 -0700
| Newsgroups | gmane.comp.web.html-tidy.devel |
|---|---|
| Message-ID | <[email protected]> |
On 5/27/05, Charlie <[email protected]> wrote: > At 06:51 AM 5/26/2005 -0700, Cory Nelson wrote: > >Yup, Win64. A ptr_type would be the easiest way out. FYI, VC++ > >defines intptr_t and uintptr_t in stddef.h. > > Good to know. I.e. are these ISO C standard? I'll check out what Solaris > supports at work today. Anyone have access to other *nix boxes to verify > the local equivalents? I believe it is ANSI C, but I could be wrong. > >It would be nice to avoid this entirely and do a union { char *s; int > >i; } when storing options, though from trying to make these changes > >myself it quicky got overwhelming as there are many blocks that depend > >on it being a ulong. > > My dim recollection is that I tried that to start and backed off because of > hassles with static initialization in config.c. > > > >The errors with user-defined structs (user data, TidyInputSource, > >TidyOutputSink) were all quick fixes. > > OK, saw that in the diffs. Surprised the Alpha compiler didn't complain > about these. Good catch. > > But this raises a general question about 64-bit pointers: in a program that > would fit into a 32-bit memory model, is it safe to lose the upper 32-bits > of pointer values? Probably not in general. I suppose some CPUs might > implement a segmented scheme (like the 8086 of old) vs. a flat, linear > address space. I believe I heard talk of a (maybe compiler?) switch for win64 that sets "only use this below 64-bit". > > > > For the record, the types ulong, uint, etc. are pre-defined for many Unix > > > compilers. > > > >That's understandable, as some platforms differ in size. But pointers > >I still can't understand :) > > I don't get why "long" is ever different than a pointer size > either. Perhaps MS gets better performance using 32-bit values even on a > 64-bit CPU. When you really need a large integer, you have to ask for it. > > However, there is nothing platform-specific about how the TidyLib configs > work. Nor is anything wired to a particular size. Currently, the only > assumption is that sizeof(long) == sizeof(char*). A safer way to express > this in the source might be sizeof(uintptr_t) == sizeof(char*) and > sizeof(uintptr_t) >= size(ulong). > > Perhaps the old standby void* would be best of all. > > > > > > At 04:21 AM 5/23/2005 -0700, Cory Nelson wrote: > >As an additional note, the standard calling convention for WIN64 is > >__fastcall, so the TIDY_CALL code should probably be changed: > > > >#ifndef TIDY_CALL > >#if defined(_WIN64) // note _WIN32 will also be defined, so we must > >test _WIN64 first. > >#define TIDY_CALL __fastcall > >#elif defined(_WIN32) > >#define TIDY_CALL __stdcall > >#else > >#define TIDY_CALL > >#endif > >#endif > > Is __fastcall the compiler default on WIN64? If so, there is no need to > set it explicitly. If not, perhaps this is better handled in the > build. Does anyone use TIDY_CALL for .NET or other wrappers on Win64? yup, it is. but it needs to be there for the same reason __stdcall is set- if your project is compiling for some other calling convention, and you want to use a pre-build DLL. > Sorry asking so many dumb questions about 64-bit code and Win64 in > particular. But I have not had a chance to work with either yet. I > appreciate your knowledge on this, Cory. > > take it easy, > Charlie > > > -- Cory Nelson http://www.int64.org ------------------------------------------------------- This SF.Net email is sponsored by Yahoo. Introducing Yahoo! Search Developer Network - Create apps using Yahoo! Search APIs Find out how you can build Yahoo! directly into your own Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005