Okay. I got I::C to work, and these are the results I get from running your (unmodified) benchmark here:
C:\test>792136.pl
Benchmark: timing 1 iterations of list, ref...
list: 0 wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU) @ 21
+.28/s (n=1)
(warning: too few iterations for a reliable count)
ref: 0 wallclock secs ( 0.03 usr + 0.00 sys = 0.03 CPU) @ 32
+.26/s (n=1)
(warning: too few iterations for a reliable count)
2000001000000
2000001000000
C:\test>792136.pl
Benchmark: timing 1 iterations of list, ref...
list: 0 wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU) @ 21
+.28/s (n=1)
(warning: too few iterations for a reliable count)
ref: 0 wallclock secs ( 0.03 usr + 0.00 sys = 0.03 CPU) @ 31
+.25/s (n=1)
(warning: too few iterations for a reliable count)
2000001000000
2000001000000
C:\test>792136.pl
Benchmark: timing 1 iterations of list, ref...
list: 0 wallclock secs ( 0.05 usr + 0.00 sys = 0.05 CPU) @ 21
+.28/s (n=1)
(warning: too few iterations for a reliable count)
ref: 0 wallclock secs ( 0.03 usr + 0.00 sys = 0.03 CPU) @ 31
+.25/s (n=1)
(warning: too few iterations for a reliable count)
2000001000000
2000001000000
Which is consistant enough to confirm my intuition. I'm not sure why you are getting different results--but I urge you to look closely at them.
BTW: Can you tell me where PERL_BITFIELD16 is typedef'd on your setup, because it was entirely missing as far as I can see on mine. Once I added:
#define OPCODE U16
#ifdef PERL_MAD
# define MADPROP_IN_BASEOP MADPROP* op_madprop;
#else
# define MADPROP_IN_BASEOP
#endif
typedef unsigned int PERL_BITFIELD16; /// <<< I added this!
typedef PERL_BITFIELD16 Optype;
I::C started working again?
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.