Both. High level languages like Pascal or C++ can produce fully 32bit<->64bit portable code, if some simple rules are followed. It's not ASM. I usually create both 32bit and 64bit building configurations right when I create new project and then compile and test them both. It's actually good idea, because some memory access issues don't show up on one bitness, but do on other. For example 32bit code can work properly, but 64bit one wouldn't.