[svn:parrot] r48626 - in trunk: . config/gen/makefiles include/parrot src src/packfile

plobsing at svn.parrot.org plobsing at svn.parrot.org
Tue Aug 24 15:28:50 UTC 2010


Author: plobsing
Date: Tue Aug 24 15:28:49 2010
New Revision: 48626
URL: https://trac.parrot.org/parrot/changeset/48626

Log:
inline byteorder functions in pf_items.c
improves rakudo startup by 1.65%

Added:
   trunk/src/packfile/byteorder.h
Deleted:
   trunk/src/byteorder.c
Modified:
   trunk/MANIFEST
   trunk/config/gen/makefiles/root.in
   trunk/include/parrot/packfile.h
   trunk/src/packfile/pf_items.c

Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST	Tue Aug 24 14:30:24 2010	(r48625)
+++ trunk/MANIFEST	Tue Aug 24 15:28:49 2010	(r48626)
@@ -1,6 +1,8 @@
 # ex: set ro:
 # $Id$
 #
+# generated by tools/dev/mk_manifest_and_skip.pl Tue Aug 24 15:05:33 2010 UT
+#
 # See below for documentation on the format of this file.
 #
 # See docs/submissions.pod and the documentation in
@@ -1243,7 +1245,6 @@
 runtime/parrot/library/yaml_dumper.pir                      [library]
 src/atomic/gcc_x86.c                                        []
 src/atomic/sparc_v9.s                                       []
-src/byteorder.c                                             []
 src/call/args.c                                             []
 src/call/context.c                                          []
 src/call/context_accessors.c                                []
@@ -1341,6 +1342,7 @@
 src/ops/var.ops                                             []
 src/packdump.c                                              []
 src/packfile.c                                              []
+src/packfile/byteorder.h                                    []
 src/packfile/pf_items.c                                     []
 src/packout.c                                               []
 src/parrot_debugger.c                                       []

Modified: trunk/config/gen/makefiles/root.in
==============================================================================
--- trunk/config/gen/makefiles/root.in	Tue Aug 24 14:30:24 2010	(r48625)
+++ trunk/config/gen/makefiles/root.in	Tue Aug 24 15:28:49 2010	(r48626)
@@ -434,7 +434,6 @@
     src/string/api$(O) \
     src/ops/core_ops$(O) \
 #IF(i386_has_gcc_cmpxchg):    src/atomic/gcc_x86$(O) \
-    src/byteorder$(O) \
     src/string/charset$(O) \
     src/core_pmcs$(O) \
     src/datatypes$(O) \
@@ -1236,8 +1235,6 @@
 #
 ###############################################################################
 
-src/byteorder$(O) : $(PARROT_H_HEADERS) src/byteorder.c
-
 src/datatypes$(O) : $(PARROT_H_HEADERS) src/datatypes.c
 
 src/extend_vtable$(O) : $(PARROT_H_HEADERS) \

Modified: trunk/include/parrot/packfile.h
==============================================================================
--- trunk/include/parrot/packfile.h	Tue Aug 24 14:30:24 2010	(r48625)
+++ trunk/include/parrot/packfile.h	Tue Aug 24 15:28:49 2010	(r48626)
@@ -1213,138 +1213,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: src/packfile/pf_items.c */
 
-
-
-/*
-** Byte Ordering Functions (byteorder.c)
-*/
-
-/* HEADERIZER BEGIN: src/byteorder.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void fetch_buf_be_12(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_16(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_32(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_4(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_be_8(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_12(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_16(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_32(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_4(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-void fetch_buf_le_8(
-    ARGOUT(unsigned char *rb),
-    ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*rb);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL fetch_iv_be(INTVAL w);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL fetch_iv_le(INTVAL w);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t fetch_op_be(opcode_t w);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t fetch_op_le(opcode_t w);
-
-#define ASSERT_ARGS_fetch_buf_be_12 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_16 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_32 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_4 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_be_8 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_12 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_16 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_32 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_4 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_buf_le_8 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(rb) \
-    , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_iv_be __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_fetch_iv_le __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_fetch_op_be __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_fetch_op_le __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/byteorder.c */
-
 #endif /* PARROT_PACKFILE_H_GUARD */
 
 /*

Deleted: trunk/src/byteorder.c
==============================================================================
--- trunk/src/byteorder.c	Tue Aug 24 15:28:49 2010	(r48625)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,567 +0,0 @@
-/*
-Copyright (C) 2001-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/byteorder.c - Byteordering functions
-
-=head1 DESCRIPTION
-
-These are assigned to a vtable when the PBC file is loaded.
-
-If the vtable function for conversion from the native byteorder is called,
-it is a I<no op> and will work, but the caller should know if the
-byteorder in the PBC file is native and skip the conversion and just map
-it in.
-
-=head2 Byte order handlers
-
-Configure will have checked for supported word sizes.
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-
-/* HEADERIZER HFILE: include/parrot/packfile.h */
-
-/*
-
-=item C<INTVAL fetch_iv_le(INTVAL w)>
-
-This function converts a 4 or 8 byte C<INTVAL> into little endian
-format. If the native format is already little endian, then no
-conversion is done.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL
-fetch_iv_le(INTVAL w)
-{
-    ASSERT_ARGS(fetch_iv_le)
-#if !PARROT_BIGENDIAN
-    return w;
-#else
-#  if INTVAL_SIZE == 4
-    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
-#  else
-#    if INTVAL_SIZE == 8
-    INTVAL r;
-
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#    else
-    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
-               INTVAL_SIZE);
-#    endif
-#  endif
-#endif
-}
-
-/*
-
-=item C<INTVAL fetch_iv_be(INTVAL w)>
-
-This function converts a 4 or 8 byte C<INTVAL> into big endian format.
-If the native format is already big endian, then no conversion is done.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-INTVAL
-fetch_iv_be(INTVAL w)
-{
-    ASSERT_ARGS(fetch_iv_be)
-#if PARROT_BIGENDIAN
-    return w;
-#else
-#  if INTVAL_SIZE == 4
-    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
-#  else
-#    if INTVAL_SIZE == 8
-    INTVAL r;
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#    else
-    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
-               INTVAL_SIZE);
-#    endif
-#  endif
-#endif
-}
-
-/*
-
-=item C<opcode_t fetch_op_be(opcode_t w)>
-
-Same as C<fetch_iv_be> for opcode_t
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t
-fetch_op_be(opcode_t w)
-{
-    ASSERT_ARGS(fetch_op_be)
-#if PARROT_BIGENDIAN
-    return w;
-#else
-#  if OPCODE_T_SIZE == 4
-    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
-        ((w & 0xff000000) >> 24);
-#  else
-    opcode_t r;
-
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#  endif
-#endif
-}
-
-/*
-
-=item C<opcode_t fetch_op_le(opcode_t w)>
-
-Same as C<fetch_iv_le> for opcode_t
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CONST_FUNCTION
-opcode_t
-fetch_op_le(opcode_t w)
-{
-    ASSERT_ARGS(fetch_op_le)
-#if !PARROT_BIGENDIAN
-    return w;
-#else
-#  if OPCODE_T_SIZE == 4
-    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
-        ((w & 0xff000000) >> 24);
-#  else
-    opcode_t r;
-
-    r = w << 56;
-    r |= (w & 0xff00) << 40;
-    r |= (w & 0xff0000) << 24;
-    r |= (w & 0xff000000) << 8;
-    r |= (w & 0xff00000000) >> 8;
-    r |= (w & 0xff0000000000) >> 24;
-    r |= (w & 0xff000000000000) >> 40;
-    r |= (w & 0xff00000000000000) >> 56;
-    return r;
-#  endif
-#endif
-}
-
-/*
-
-=pod
-
-Unrolled routines for swapping various sizes from 32-128 bits. These
-should only be used if alignment is unknown or we are pulling something
-out of a padded buffer.
-
-=cut
-
-*/
-
-/*
-
-=item C<void fetch_buf_be_4(unsigned char *rb, const unsigned char *b)>
-
-Converts a 4-byte big-endian buffer C<b> into a little-endian C<rb>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_4)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 4);
-#else
-    rb[0] = b[3];
-    rb[1] = b[2];
-    rb[2] = b[1];
-    rb[3] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_4(unsigned char *rb, const unsigned char *b)>
-
-Converts a 4-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_4)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 4);
-#else
-    rb[0] = b[3];
-    rb[1] = b[2];
-    rb[2] = b[1];
-    rb[3] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_8(unsigned char *rb, const unsigned char *b)>
-
-Converts an 8-byte big-endian buffer C<b> into a little-endian buffer C<rb>
-
-=cut
-
-*/
-
-void
-fetch_buf_be_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_8)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 8);
-#else
-    rb[0] = b[7];
-    rb[1] = b[6];
-    rb[2] = b[5];
-    rb[3] = b[4];
-    rb[4] = b[3];
-    rb[5] = b[2];
-    rb[6] = b[1];
-    rb[7] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_8(unsigned char *rb, const unsigned char *b)>
-
-Converts an 8-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_8)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 8);
-#else
-    rb[0] = b[7];
-    rb[1] = b[6];
-    rb[2] = b[5];
-    rb[3] = b[4];
-    rb[4] = b[3];
-    rb[5] = b[2];
-    rb[6] = b[1];
-    rb[7] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_12(unsigned char *rb, const unsigned char *b)>
-
-Converts a 12-byte little-endian buffer C<b> into a big-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_12)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 12);
-#else
-    rb[0] = b[11];
-    rb[1] = b[10];
-    rb[2] = b[9];
-    rb[3] = b[8];
-    rb[4] = b[7];
-    rb[5] = b[6];
-    rb[6] = b[5];
-    rb[7] = b[4];
-    rb[8] = b[3];
-    rb[9] = b[2];
-    rb[10] = b[1];
-    rb[11] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_12(unsigned char *rb, const unsigned char *b)>
-
-Converts a 12-byte big-endian buffer C<b> into a little-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_12)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 12);
-#else
-    rb[0] = b[11];
-    rb[1] = b[10];
-    rb[2] = b[9];
-    rb[3] = b[8];
-    rb[4] = b[7];
-    rb[5] = b[6];
-    rb[6] = b[5];
-    rb[7] = b[4];
-    rb[8] = b[3];
-    rb[9] = b[2];
-    rb[10] = b[1];
-    rb[11] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_16(unsigned char *rb, const unsigned char *b)>
-
-Converts a 16-byte little-endian buffer C<b> into a big-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_16)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 16);
-#else
-    rb[0] = b[15];
-    rb[1] = b[14];
-    rb[2] = b[13];
-    rb[3] = b[12];
-    rb[4] = b[11];
-    rb[5] = b[10];
-    rb[6] = b[9];
-    rb[7] = b[8];
-    rb[8] = b[7];
-    rb[9] = b[6];
-    rb[10] = b[5];
-    rb[11] = b[4];
-    rb[12] = b[3];
-    rb[13] = b[2];
-    rb[14] = b[1];
-    rb[15] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_16(unsigned char *rb, const unsigned char *b)>
-
-Converts a 16-byte big-endian buffer C<b> into a little-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_16)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 16);
-#else
-    rb[0] = b[15];
-    rb[1] = b[14];
-    rb[2] = b[13];
-    rb[3] = b[12];
-    rb[4] = b[11];
-    rb[5] = b[10];
-    rb[6] = b[9];
-    rb[7] = b[8];
-    rb[8] = b[7];
-    rb[9] = b[6];
-    rb[10] = b[5];
-    rb[11] = b[4];
-    rb[12] = b[3];
-    rb[13] = b[2];
-    rb[14] = b[1];
-    rb[15] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_le_32(unsigned char *rb, const unsigned char *b)>
-
-Converts a 32-byte little-endian buffer C<b> into a big-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_le_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_le_32)
-#if !PARROT_BIGENDIAN
-    memcpy(rb, b, 32);
-#else
-    rb[0] = b[31];
-    rb[1] = b[30];
-    rb[2] = b[29];
-    rb[3] = b[28];
-    rb[4] = b[27];
-    rb[5] = b[26];
-    rb[6] = b[25];
-    rb[7] = b[24];
-    rb[8] = b[23];
-    rb[9] = b[22];
-    rb[10] = b[21];
-    rb[11] = b[20];
-    rb[12] = b[19];
-    rb[13] = b[18];
-    rb[14] = b[17];
-    rb[15] = b[16];
-    rb[16] = b[15];
-    rb[17] = b[14];
-    rb[18] = b[13];
-    rb[19] = b[12];
-    rb[20] = b[11];
-    rb[21] = b[10];
-    rb[22] = b[9];
-    rb[23] = b[8];
-    rb[24] = b[7];
-    rb[25] = b[6];
-    rb[26] = b[5];
-    rb[27] = b[4];
-    rb[28] = b[3];
-    rb[29] = b[2];
-    rb[30] = b[1];
-    rb[31] = b[0];
-#endif
-}
-
-/*
-
-=item C<void fetch_buf_be_32(unsigned char *rb, const unsigned char *b)>
-
-Converts a 32-byte big-endian buffer C<b> into a little-endian buffer C<b>.
-
-=cut
-
-*/
-
-void
-fetch_buf_be_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_buf_be_32)
-#if PARROT_BIGENDIAN
-    memcpy(rb, b, 32);
-#else
-    rb[0] = b[31];
-    rb[1] = b[30];
-    rb[2] = b[29];
-    rb[3] = b[28];
-    rb[4] = b[27];
-    rb[5] = b[26];
-    rb[6] = b[25];
-    rb[7] = b[24];
-    rb[8] = b[23];
-    rb[9] = b[22];
-    rb[10] = b[21];
-    rb[11] = b[20];
-    rb[12] = b[19];
-    rb[13] = b[18];
-    rb[14] = b[17];
-    rb[15] = b[16];
-    rb[16] = b[15];
-    rb[17] = b[14];
-    rb[18] = b[13];
-    rb[19] = b[12];
-    rb[20] = b[11];
-    rb[21] = b[10];
-    rb[22] = b[9];
-    rb[23] = b[8];
-    rb[24] = b[7];
-    rb[25] = b[6];
-    rb[26] = b[5];
-    rb[27] = b[4];
-    rb[28] = b[3];
-    rb[29] = b[2];
-    rb[30] = b[1];
-    rb[31] = b[0];
-#endif
-}
-
-/*
-
-=back
-
-=head1 HISTORY
-
-Initial version by Melvin on 2002/05/01
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Added: trunk/src/packfile/byteorder.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/src/packfile/byteorder.h	Tue Aug 24 15:28:49 2010	(r48626)
@@ -0,0 +1,581 @@
+/*
+Copyright (C) 2001-2009, Parrot Foundation.
+$Id: byteorder.c 45297 2010-03-30 01:33:45Z coke $
+
+=head1 NAME
+
+src/byteorder.c - Byteordering functions
+
+=head1 DESCRIPTION
+
+These are assigned to a vtable when the PBC file is loaded.
+
+If the vtable function for conversion from the native byteorder is called,
+it is a I<no op> and will work, but the caller should know if the
+byteorder in the PBC file is native and skip the conversion and just map
+it in.
+
+=head2 Byte order handlers
+
+Configure will have checked for supported word sizes.
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+
+/* HEADERIZER HFILE: none */
+
+/*
+
+=item C<static INTVAL fetch_iv_le(INTVAL w)>
+
+This function converts a 4 or 8 byte C<INTVAL> into little endian
+format. If the native format is already little endian, then no
+conversion is done.
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static INTVAL
+fetch_iv_le(INTVAL w)
+{
+    ASSERT_ARGS(fetch_iv_le)
+#if !PARROT_BIGENDIAN
+    return w;
+#else
+#  if INTVAL_SIZE == 4
+    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
+#  else
+#    if INTVAL_SIZE == 8
+    INTVAL r;
+
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#    else
+    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
+               INTVAL_SIZE);
+#    endif
+#  endif
+#endif
+}
+
+/*
+
+=item C<static INTVAL fetch_iv_be(INTVAL w)>
+
+This function converts a 4 or 8 byte C<INTVAL> into big endian format.
+If the native format is already big endian, then no conversion is done.
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static INTVAL
+fetch_iv_be(INTVAL w)
+{
+    ASSERT_ARGS(fetch_iv_be)
+#if PARROT_BIGENDIAN
+    return w;
+#else
+#  if INTVAL_SIZE == 4
+    return (w << 24) | ((w & 0xff00) << 8) | ((w & 0xff0000) >> 8) | (w >> 24);
+#  else
+#    if INTVAL_SIZE == 8
+    INTVAL r;
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#    else
+    exit_fatal(1, "Unsupported INTVAL_SIZE=%d\n",
+               INTVAL_SIZE);
+#    endif
+#  endif
+#endif
+}
+
+/*
+
+=item C<static opcode_t fetch_op_be(opcode_t w)>
+
+Same as C<fetch_iv_be> for opcode_t
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static opcode_t
+fetch_op_be(opcode_t w)
+{
+    ASSERT_ARGS(fetch_op_be)
+#if PARROT_BIGENDIAN
+    return w;
+#else
+#  if OPCODE_T_SIZE == 4
+    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
+        ((w & 0xff000000) >> 24);
+#  else
+    opcode_t r;
+
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#  endif
+#endif
+}
+
+/*
+
+=item C<static opcode_t fetch_op_le(opcode_t w)>
+
+Same as C<fetch_iv_le> for opcode_t
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_WARN_UNUSED_RESULT
+PARROT_CONST_FUNCTION
+static opcode_t
+fetch_op_le(opcode_t w)
+{
+    ASSERT_ARGS(fetch_op_le)
+#if !PARROT_BIGENDIAN
+    return w;
+#else
+#  if OPCODE_T_SIZE == 4
+    return (w << 24) | ((w & 0x0000ff00) << 8) | ((w & 0x00ff0000) >> 8) |
+        ((w & 0xff000000) >> 24);
+#  else
+    opcode_t r;
+
+    r = w << 56;
+    r |= (w & 0xff00) << 40;
+    r |= (w & 0xff0000) << 24;
+    r |= (w & 0xff000000) << 8;
+    r |= (w & 0xff00000000) >> 8;
+    r |= (w & 0xff0000000000) >> 24;
+    r |= (w & 0xff000000000000) >> 40;
+    r |= (w & 0xff00000000000000) >> 56;
+    return r;
+#  endif
+#endif
+}
+
+/*
+
+=pod
+
+Unrolled routines for swapping various sizes from 32-128 bits. These
+should only be used if alignment is unknown or we are pulling something
+out of a padded buffer.
+
+=cut
+
+*/
+
+/*
+
+=item C<static void fetch_buf_be_4(unsigned char *rb, const unsigned char *b)>
+
+Converts a 4-byte big-endian buffer C<b> into a little-endian C<rb>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_be_4)
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 4);
+#else
+    rb[0] = b[3];
+    rb[1] = b[2];
+    rb[2] = b[1];
+    rb[3] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_4(unsigned char *rb, const unsigned char *b)>
+
+Converts a 4-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_4(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_le_4)
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 4);
+#else
+    rb[0] = b[3];
+    rb[1] = b[2];
+    rb[2] = b[1];
+    rb[3] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_8(unsigned char *rb, const unsigned char *b)>
+
+Converts an 8-byte big-endian buffer C<b> into a little-endian buffer C<rb>
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_be_8)
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 8);
+#else
+    rb[0] = b[7];
+    rb[1] = b[6];
+    rb[2] = b[5];
+    rb[3] = b[4];
+    rb[4] = b[3];
+    rb[5] = b[2];
+    rb[6] = b[1];
+    rb[7] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_8(unsigned char *rb, const unsigned char *b)>
+
+Converts an 8-byte little-endian buffer C<b> into a big-endian buffer C<rb>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_8(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_le_8)
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 8);
+#else
+    rb[0] = b[7];
+    rb[1] = b[6];
+    rb[2] = b[5];
+    rb[3] = b[4];
+    rb[4] = b[3];
+    rb[5] = b[2];
+    rb[6] = b[1];
+    rb[7] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_12(unsigned char *rb, const unsigned char *b)>
+
+Converts a 12-byte little-endian buffer C<b> into a big-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_le_12)
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 12);
+#else
+    rb[0] = b[11];
+    rb[1] = b[10];
+    rb[2] = b[9];
+    rb[3] = b[8];
+    rb[4] = b[7];
+    rb[5] = b[6];
+    rb[6] = b[5];
+    rb[7] = b[4];
+    rb[8] = b[3];
+    rb[9] = b[2];
+    rb[10] = b[1];
+    rb[11] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_12(unsigned char *rb, const unsigned char *b)>
+
+Converts a 12-byte big-endian buffer C<b> into a little-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_12(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_be_12)
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 12);
+#else
+    rb[0] = b[11];
+    rb[1] = b[10];
+    rb[2] = b[9];
+    rb[3] = b[8];
+    rb[4] = b[7];
+    rb[5] = b[6];
+    rb[6] = b[5];
+    rb[7] = b[4];
+    rb[8] = b[3];
+    rb[9] = b[2];
+    rb[10] = b[1];
+    rb[11] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_16(unsigned char *rb, const unsigned char *b)>
+
+Converts a 16-byte little-endian buffer C<b> into a big-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_le_16)
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 16);
+#else
+    rb[0] = b[15];
+    rb[1] = b[14];
+    rb[2] = b[13];
+    rb[3] = b[12];
+    rb[4] = b[11];
+    rb[5] = b[10];
+    rb[6] = b[9];
+    rb[7] = b[8];
+    rb[8] = b[7];
+    rb[9] = b[6];
+    rb[10] = b[5];
+    rb[11] = b[4];
+    rb[12] = b[3];
+    rb[13] = b[2];
+    rb[14] = b[1];
+    rb[15] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_16(unsigned char *rb, const unsigned char *b)>
+
+Converts a 16-byte big-endian buffer C<b> into a little-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_16(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_be_16)
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 16);
+#else
+    rb[0] = b[15];
+    rb[1] = b[14];
+    rb[2] = b[13];
+    rb[3] = b[12];
+    rb[4] = b[11];
+    rb[5] = b[10];
+    rb[6] = b[9];
+    rb[7] = b[8];
+    rb[8] = b[7];
+    rb[9] = b[6];
+    rb[10] = b[5];
+    rb[11] = b[4];
+    rb[12] = b[3];
+    rb[13] = b[2];
+    rb[14] = b[1];
+    rb[15] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_le_32(unsigned char *rb, const unsigned char *b)>
+
+Converts a 32-byte little-endian buffer C<b> into a big-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_le_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_le_32)
+#if !PARROT_BIGENDIAN
+    memcpy(rb, b, 32);
+#else
+    rb[0] = b[31];
+    rb[1] = b[30];
+    rb[2] = b[29];
+    rb[3] = b[28];
+    rb[4] = b[27];
+    rb[5] = b[26];
+    rb[6] = b[25];
+    rb[7] = b[24];
+    rb[8] = b[23];
+    rb[9] = b[22];
+    rb[10] = b[21];
+    rb[11] = b[20];
+    rb[12] = b[19];
+    rb[13] = b[18];
+    rb[14] = b[17];
+    rb[15] = b[16];
+    rb[16] = b[15];
+    rb[17] = b[14];
+    rb[18] = b[13];
+    rb[19] = b[12];
+    rb[20] = b[11];
+    rb[21] = b[10];
+    rb[22] = b[9];
+    rb[23] = b[8];
+    rb[24] = b[7];
+    rb[25] = b[6];
+    rb[26] = b[5];
+    rb[27] = b[4];
+    rb[28] = b[3];
+    rb[29] = b[2];
+    rb[30] = b[1];
+    rb[31] = b[0];
+#endif
+}
+
+/*
+
+=item C<static void fetch_buf_be_32(unsigned char *rb, const unsigned char *b)>
+
+Converts a 32-byte big-endian buffer C<b> into a little-endian buffer C<b>.
+
+=cut
+
+*/
+
+PARROT_INLINE
+static void
+fetch_buf_be_32(ARGOUT(unsigned char *rb), ARGIN(const unsigned char *b))
+{
+    ASSERT_ARGS(fetch_buf_be_32)
+#if PARROT_BIGENDIAN
+    memcpy(rb, b, 32);
+#else
+    rb[0] = b[31];
+    rb[1] = b[30];
+    rb[2] = b[29];
+    rb[3] = b[28];
+    rb[4] = b[27];
+    rb[5] = b[26];
+    rb[6] = b[25];
+    rb[7] = b[24];
+    rb[8] = b[23];
+    rb[9] = b[22];
+    rb[10] = b[21];
+    rb[11] = b[20];
+    rb[12] = b[19];
+    rb[13] = b[18];
+    rb[14] = b[17];
+    rb[15] = b[16];
+    rb[16] = b[15];
+    rb[17] = b[14];
+    rb[18] = b[13];
+    rb[19] = b[12];
+    rb[20] = b[11];
+    rb[21] = b[10];
+    rb[22] = b[9];
+    rb[23] = b[8];
+    rb[24] = b[7];
+    rb[25] = b[6];
+    rb[26] = b[5];
+    rb[27] = b[4];
+    rb[28] = b[3];
+    rb[29] = b[2];
+    rb[30] = b[1];
+    rb[31] = b[0];
+#endif
+}
+
+/*
+
+=back
+
+=head1 HISTORY
+
+Initial version by Melvin on 2002/05/01
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: trunk/src/packfile/pf_items.c
==============================================================================
--- trunk/src/packfile/pf_items.c	Tue Aug 24 14:30:24 2010	(r48625)
+++ trunk/src/packfile/pf_items.c	Tue Aug 24 15:28:49 2010	(r48626)
@@ -33,6 +33,7 @@
 */
 
 #include "parrot/parrot.h"
+#include "byteorder.h"
 
 /* HEADERIZER HFILE: include/parrot/packfile.h */
 


More information about the parrot-commits mailing list