See https://www.pellesc.se/ (https://www.pellesc.se/), Download and Changes.
Thanks for new version for testing.
Windows 7 SP1 with an old AMD CPU without MOVBE:
poide crash
ModLoad: 00000001`3f7c0000 00000001`3fb5c000 poide.exe
...
ModLoad: 000007fe`e2bc0000 000007fe`e2bec000 C:\code\PellesC14rc1\Bin\Wizards64\wininst.dll
(8964.84dc): Illegal instruction - code c000001d (first chance)
(8964.84dc): Unknown exception - code c000041d (!!! second chance !!!)
*** WARNING: Unable to verify checksum for poide.exe
*** ERROR: Symbol file could not be found. Defaulted to export symbols for poide.exe -
poide!WizScanForDependenciesA+0xe2846:
00000001`3f293d46 660f38f1442430 movbe word ptr [rsp+30h],ax ss:00000000`009eebd0=0000
polink crash
ModLoad: 00000001`3f8f0000 00000001`3f935000 image00000001`3f8f0000
...
(8958.8a30): Illegal instruction - code c000001d (first chance)
(8958.8a30): Illegal instruction - code c000001d (!!! second chance !!!)
*** WARNING: Unable to verify checksum for image00000001`3f8f0000
*** ERROR: Module load completed but symbols could not be loaded for image00000001`3f8f0000
image00000001_3f8f0000+0x1984:
00000001`3f8f1984 0f38f14608 movbe dword ptr [rsi+8],eax ds:00000000`00222220=baadf00d
polib fail
Building zlib.lib.
POLIB: fatal error: An internal error occurred.
https://uops.info/html-instr/MOVBE_R32_M32.html (https://uops.info/html-instr/MOVBE_R32_M32.html)
Incompatible CPU
AMD Athlon(tm) II X2 220 Processor
Intel Core i5-2450M CPU
https://en.wikipedia.org/wiki/Jaguar_(microarchitecture) (https://en.wikipedia.org/wiki/Jaguar_(microarchitecture))
Not sure, if this detect MOVBE
#include <intrin.h>
void __cdecl exit(int status);
int printf(const char * restrict format, ...);
#pragma comment(lib, "msvcrt.lib")
//#pragma comment(linker,"/subsystem:console,5.1")
void __cdecl mainCRTStartup(void)
{
int __cdecl main(void);
void __cdecl exit(int status);
exit(main());
}
// CPUID.(EAX=01H, ECX=0H):ECX.MOVBE[bit 22]
// EAX, EBX, ECX and EDX
// 0, 1, 2, 3
int GetCPUFeature(void)
{
int r[4]; // EAX, EBX, ECX and EDX
int rc = 0;
_cpuid(r, 0); // Highest Function Parameter and Manufacturer ID
if (r[0] != 0x500) { //
_cpuid(r, 1); // Processor Info and Feature Bits
rc = _bittest((const long int *)&r[2], 22);
}
return rc;
}
int main(void)
{
printf("CPU options: %d\n", GetCPUFeature());
exit(0);
}
Hi Pelle,
Thanks for the new release. Poide is crashing on Windows 7 Sp1.
Well, the movbe instruction is rather old. Hard to find the complete history and origin, but possibly from ~2013.
I have hold back some progress for years, due to certain old processors, but I'm getting fed up with that. In a perfect world I rather drop X86/X64 and move permanently to ARM64. Or better yet: find another project to waste time on. We'll see...
Quote from: Pelle on March 15, 2026, 06:39:56 PMSee https://www.pellesc.se/ (https://www.pellesc.se/), Download and Changes.
Thanks very much!
John Z
P.S. ARM64 will be a good challenge as will finding testers. I think currently a general population of users is a few percent, for high end systems it is reportedly approaching 10% mainly due to high performance snapdragon systems. AI supplied numbers :( Of course that neglects about 1 billion device in phones . . . .
To check if your processor supports MOVBE, run Coreinfo on the command prompt :
Coreinfo64.exe -f
Check the output of the tool to see if MOVBE is supported :
MOVBE * Supports MOVBE instruction
https://learn.microsoft.com/en-us/sysinternals/downloads/coreinfo
Hopefully users test new version and don't wait release version.
I try to test Windows 7 with new version, but every PC's CPUs are problem.
Windows 10 and 11 test PCs should not having any problems.
Pelles C support testing other versions with -x -xml poide commandline options.
Tested on Window 7 Pro, DELL 64 bit (still get security updates)
Install seemed ok, however poide would not start even enough to show a window.
Didn't see it running in the background either.
poview worked.
DEL optiplex 780 Intel Core Duo E8400 release date 2008
John Z
Update: Tested on Win 11 Home 24H2 HP, was successful, installed and built vcardz_i program fine.
I think processors dating back to 2012\2013 are supporting the movbe instruction.
https://uops.info/html-instr/MOVBE_R32_M32.html (https://uops.info/html-instr/MOVBE_R32_M32.html)
Long history.
Intel Bonnel 2008 - 2013
Silvermont 2013 -
Airmont 2015 -
AMD Zen+ 2018 -
EDIT: Check_MOVBE2 show Vendor and Brand too.
Nice work Timo - results on two Windows 7 systems -
DELL windows 7 Pro
GenuineIntel
Intel(R) Core(TM) Duo CPU E8400 @ 3.00Ghz
MOVBE not supported
Sony Laptop windows 7 Home
GenuineIntel
Intel(R) Core(TM) Duo CPU T6600 @ 2.20Ghz
MOVBE not supported
👍
John Z
Hi Timo,
Thanks for the new tool. My result :
MOVBE not supported
I wish that users test this release candidate and don't wait release version, as happened before.
It is possible to install release candidate to own folder and after that use it with -x -xml commandline.
After that, remove registry setting before using an older Pelles C poide.
Also useful to make a zip of Pelles C folder for testing it in different PCs.
Testing many programs now, but a question -
Will each program compiled in V14_RC1 on a 'modern' CPU then need to be run/tested on a Windows 7 system and/or with an older CPU not supporting the MOVBE op code?
Essentially will programs completed with V14 possibly include the MOVBE op code in the exe?
GDIpTest program fails under V14, but OK under V13. Not sure why yet no error during creation but crashes on opening file to display. Sources , picture and exe files included. The picture is what makes the upload so large but wanted to include exact test case. Can be deleted later to release space. Didn't find MOVBE in the exe btw
John Z
Seems you can use a HEX Editor and search for HEX 0F38F1 (found in several places poide.exe) or 0F38F0
Hi John,
You can also disassemble the MS COFF object module files produced by Pelles C with Agner Fog's objconv tool :
https://github.com/gitGNU/objconv
Weirdness
On a rather large 64 bit program V14 keeps popping up a message box "The main.rc has been changed outside of the editor. Do you want to reload it?" Even if clicking Yes and Save All, next build/run it pops up again. Needless to say. but I will, nothing I am doing is changing the .rc file. It happens immediately after starting the program within the IDE environment. Checking the .rc file date-time, it is changed to the time the program was started. When I run the program outside of the IDE in the same directory, the .rc file does not change date-time.
Same program V14 complains about an invalid character in file.c which is 1252 ANSI Latin-1 and will not open it in the editor. The file shows no invalid characters in TextPad editor. Even though V14 says invalid character and won't open it, it compiles without complaint and the final exe is created. Also clicking on the + to display file.c procedures works, just can't get it into the editor no matter which proc is clicked. Related to issue 1 maybe I don't know.
Verified under V13 neither of these issues exist. However bug? or code? I don't know for sure.
It is a big program (vcardz_i) with a lot of features to test so possibly more issues.
Unfortunately I think I'm not going to be able to develop a minimum program to demo.
I've tested about 20 small programs w/o issue running in Windows 11 with a MOVBE capable processor. I haven't tried the resulting programs in Win 7 with a MOVBE incapable processor.
John Z
Quote from: John Z on March 26, 2026, 03:33:23 PMWeirdness
On a rather large 64 bit program V14 keeps popping up a message box "The main.rc has been changed outside of the editor. Do you want to reload it?" Even if clicking Yes and Save All, next build/run it pops up again. Needless to say. but I will, nothing I am doing is changing the .rc file. It happens immediately after starting the program within the IDE environment. Checking the .rc file date-time, it is changed to the time the program was started. When I run the program outside of the IDE in the same directory, the .rc file does not change date-time.
I had a similar problem, the cause was an addin that increments the build number at each compilation.
Quote from: John Z on March 26, 2026, 10:50:20 AMTesting many programs now, but a question -
Will each program compiled in V14_RC1 on a 'modern' CPU then need to be run/tested on a Windows 7 system and/or with an older CPU not supporting the MOVBE op code?
Essentially will programs completed with V14 possibly include the MOVBE op code in the exe?
GDIpTest program fails under V14, but OK under V13. Not sure why yet no error during creation but crashes on opening file to display. Sources , picture and exe files included. The picture is what makes the upload so large but wanted to include exact test case. Can be deleted later to release space. Didn't find MOVBE in the exe btw
John Z
Seems you can use a HEX Editor and search for HEX 0F38F1 (found in several places poide.exe) or 0F38F0
If project build as stdcall, it didn't crash.
Thanks Michele
Quote from: Michele on March 27, 2026, 09:12:40 AMI had a similar problem, the cause was an addin that increments the build number at each compilation.
You nailed it in one! Seems the V14_RC1 did not include Timo's update for that Add-In.
Disabling it fix that issue.
Thanks,
John Z
Thanks Timo,
Quote from: TimoVJL on March 27, 2026, 10:39:41 AMIf project build as stdcall, it didn't crash.
So the problem/issue or bug is with _fastcall in V14 acting differently from V13.
Appreciation,
John Z
Attached is a simple GUI built with Pelles C V14 RC1. Can be Useful to test the movbe issue.
Thank you all!
( I got side-tracked hunting down an elusive ARM64 bug )
The MOVBE support isn't essential. I can' live without it. Seems like less hassle to simple comment out the eight code generator rules producing this instruction.
I will rebuild everything (as usual) for Release Candidate #2. I need a few days for this.