This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[glibc] Deleted branch master-ppc-refactor


The branch 'master-ppc-refactor' was deleted.
It previously pointed to:

 11b1132... powerpc: refactor logb{f,l}

Diff:

!!! WARNING: THE FOLLOWING COMMITS ARE NO LONGER ACCESSIBLE (LOST):
-------------------------------------------------------------------

  11b1132... powerpc: refactor logb{f,l}
  1af4275... math: Use wordsize-64 version for s_logb
  8a2b9b2... benchtests: Add logb{f} benchmark
  4243921... powerpc: Refactor modf{f}
  a9ed9fb... powerpc: hypot refactor and optimization
  24b7f96... benchtests: hypot benchmark
  bf7680e... powerpc: Use generic e_expf
  f7ef938... powerpc: Refactor powerpc32 lround/lroundf/llround/llroundf

commit 11b1132a64fbab6bf206ff4f5c64bac05ad22237
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Mar 19 12:22:21 2019 +0000

    powerpc: refactor logb{f,l}
    
    The power7 logb implementation does not show a performance gain on
    ISA 2.07+ chips with faster floating-point to GRP instructions
    (currently POWER8 and POWER9).
    
    This patch moves the POWER7 implementation to generic one and enables
    it for POWER7.  It also add some cleanup to use inline floating-point
    number instead of define them using static const.
    
    The performance difference is for POWER9:
    
      - Without patch:
      "logb": {
       "subnormal": {
        "duration": 4.99202e+09,
        "iterations": 8.83662e+08,
        "max": 75.194,
        "min": 5.501,
        "mean": 5.64925
       },
       "normal": {
        "duration": 4.97063e+09,
        "iterations": 9.97094e+08,
        "max": 46.489,
        "min": 4.956,
        "mean": 4.98512
       }
      }
    
      - With patch:
      "logb": {
       "subnormal": {
        "duration": 4.97226e+09,
        "iterations": 9.92036e+08,
        "max": 77.209,
        "min": 4.892,
        "mean": 5.01218
       },
       "normal": {
        "duration": 4.96192e+09,
        "iterations": 1.07545e+09,
        "max": 12.361,
        "min": 4.593,
        "mean": 4.61382
       }
      }
    
    The ifunc implementation is also enabled only for powerpc64.
    
    Checked on powerpc-linux-gnu (built without --with-cpu, with
    --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
    powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
    and --disable-multi-arch).
    
    	* sysdeps/powerpc/power7/fpu/s_logb.c: Move to ...
    	* sysdeps/powerpc/fpu/s_logb.c: ... here.  Use inline FP constants.
    	* sysdeps/powerpc/power7/fpu/s_logbf.c: Move to ...
    	* sysdeps/powerpc/fpu/s_logbf.c: ... here.  Use inline FP constants.
    	* sysdeps/powerpc/power7/fpu/s_logbl.c: Move to ...
    	* sysdeps/powerpc/fpu/s_logbl.c: ... here.  Use inline FP constants.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c:
    	Adjust implementation path.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c:
    	Adjust implementation path.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c:
    	Adjust implementation path.
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile
    	(libm-sysdep_routines): Add s_log* objects.
    	(CFLAGS-s_logbf-power7.c, CFLAGS-s_logbl-power7.c,
    	CFLAGS-s_logb-power7.c): New fule.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c: Move to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c: ... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c: Move to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c: ... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c: Move to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c: ... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile: Remove file.
    	* sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c: Remove file.
    	* sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c: Likewise.
    	* sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c: Likewise.

commit 1af4275b771719494d5146bdf174d22de97c2be8
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Thu Mar 28 19:14:04 2019 +0000

    math: Use wordsize-64 version for s_logb
    
      - The resulting binary difference on 32 bits architecture is
        minimum.  On i686-linux-gnu (with architecture optimization
        routine removed) there is no different using logb benchtests
    
      - It helps wordsize-64 architectures that use ldbl-opt.
    
      - It add some code simplification with reduction of duplicated
        implementations.
    
    Checked on powerpc-linux-gnu (built without --with-cpu, with
    --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
    powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
    and --disable-multi-arch).
    
    	* sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c: Move to ...
    	* sysdeps/ieee754/dbl-64/s_logb.c: ... here.  Add work around for
    	powerpc32 integer 0 converting to -0.

commit 8a2b9b2e62e4c2a65ff9cbd87f48580b6f0b939e
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Thu Mar 14 11:55:04 2019 +0000

    benchtests: Add logb{f} benchmark
    
    	* benchtests/Makefile (bench-math): Add logb.
    	* benchtests/logb-inputs: New file.
    	* benchtests/logbf-inputs: New file.

commit 4243921fce74e160ffb874b2c76f855070c0d606
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Mar 18 20:18:49 2019 +0000

    powerpc: Refactor modf{f}
    
    The modf{f} optimization is not an optimization for ISA 2.07+.  This
    patch move the IFUNC for powerpc64 only, move the power5+ to generic
    location, and include the generic implementation for ISA 2.07+.
    
    The performance changes are based on modf benchtests:
    
      * POWER9 - ppc64
      "modf": {
       "": {
        "duration": 4.97057e+09,
        "iterations": 1.00688e+09,
        "max": 28.76,
        "min": 4.912,
        "mean": 4.9366
       }
      }
      * POWER9 - power5+
      "modf": {
       "": {
        "duration": 4.98291e+09,
        "iterations": 9.32818e+08,
        "max": 15.058,
        "min": 5.107,
        "mean": 5.34178
       }
      }
    
      * POWER8 - ppc64
       "modf": {
       "": {
        "duration": 5.05329e+09,
        "iterations": 8.38814e+08,
        "max": 518.051,
        "min": 5.79,
        "mean": 6.02433
       }
      }
      * POWER8 - power5+
      "modf": {
       "": {
        "duration": 5.05573e+09,
        "iterations": 8.35254e+08,
        "max": 63.141,
        "min": 5.873,
        "mean": 6.05293
       }
      }
    
      * POWER7 - ppc64
      "modf": {
       "": {
        "duration": 4.89818e+09,
        "iterations": 1.08408e+09,
        "max": 57.556,
        "min": 3.953,
        "mean": 4.51827
       }
      }
      * POWER7 - power5+
      "modf": {
       "": {
        "duration": 4.83789e+09,
        "iterations": 1.33409e+09,
        "max": 46.608,
        "min": 2.224,
        "mean": 3.62636
       }
      }
    
    Checked on powerpc-linux-gnu (built without --with-cpu, with
    --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
    powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
    and --disable-multi-arch).
    
    	* sysdeps/powerpc/power5+/fpu/s_modf.c: Move to ...
    	* sysdeps/powerpc/fpu/s_modf.c: ... here.  Add ISA 2.07 optimization.
    	* sysdeps/powerpc/power5+/fpu/s_modff.c: Move to ...
    	* sysdeps/powerpc/fpu/s_modff.c: ... here.  Add ISA 2.07 optimization.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-power5+.c:
    	Adjust include.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-power5+.c:
    	Likewise.
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile (sysdep_calls,
    	sysdep_routines): Add s_modf* objects.
    	(CFLAGS-s_modf-power5+.c, CFLAGS-s_modff-power5+.c,
    	CFLAGS-s_modf-ppc64.c, CFLAGS-s_modff-ppc64.c): New rule.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modf-power5+.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c: Movo
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modf-power5+.c: Move
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c: Move to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modf.c: ... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-power5+.c: Move
    	to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modff-power5+.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-ppc64.c: Move to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modff-ppc64.c:
    	... here.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff.c: Move to ...
    	* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modff.c: ... here.

commit a9ed9fb5f6ae8a36440d29c7d69751eab9a1fa15
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Mar 18 17:40:50 2019 +0000

    powerpc: hypot refactor and optimization
    
    The powerpc hypot is slight optimized by:
    
      - Commit 8df4e219e43, both isnan and isinf are always inlined and thus
        the check TEST_INF_NAN does not make sense anymore.  The generic
        check for POWER7 should be faster on all powerpc configuration.
    
      - Two reduntant checks (for y == 0 and y > two60factor && (x / y) > two60)
        are removed.
    
    Both changes leads to unrequired ifunc especialization for power7 and
    thus they are removed.  Finally The code is also cleanup a bit by inlining
    the constants floating points.
    
    The performance changes using the hypot benchtests are:
    
      - POWER9 without patch:
        "hypot": {
         "overflow": {
          "duration": 4.98585e+09,
          "iterations": 4.84932e+08,
          "max": 46.551,
          "min": 10.229,
          "mean": 10.2815
         },
         "higher_two500": {
          "duration": 5.00192e+09,
          "iterations": 4.24843e+08,
          "max": 33.319,
          "min": 11.606,
          "mean": 11.7736
         },
         "subnormal": {
          "duration": 5.0075e+09,
          "iterations": 4.06792e+08,
          "max": 22.178,
          "min": 12.15,
          "mean": 12.3097
         },
         "less_two500": {
          "duration": 5.00685e+09,
          "iterations": 4.08772e+08,
          "max": 22.784,
          "min": 12.052,
          "mean": 12.2485
         },
         "default": {
          "duration": 5.06002e+09,
          "iterations": 4.09894e+08,
          "max": 20.648,
          "min": 11.874,
          "mean": 12.3447
         }
        }
    
      - POWER9 with patch:
        "hypot": {
         "overflow": {
          "duration": 4.91848e+09,
          "iterations": 7.28039e+08,
          "max": 47.958,
          "min": 6.436,
          "mean": 6.75579
         },
         "higher_two500": {
          "duration": 4.9359e+09,
          "iterations": 6.63376e+08,
          "max": 20.783,
          "min": 7.321,
          "mean": 7.44057
         },
         "subnormal": {
          "duration": 4.9479e+09,
          "iterations": 6.19772e+08,
          "max": 18.856,
          "min": 7.817,
          "mean": 7.98341
         },
         "less_two500": {
          "duration": 4.94275e+09,
          "iterations": 6.3889e+08,
          "max": 17.452,
          "min": 7.597,
          "mean": 7.73647
         },
         "default": {
          "duration": 5.03645e+09,
          "iterations": 5.70718e+08,
          "max": 18.904,
          "min": 8.55,
          "mean": 8.82476
         }
        }
    
      - POWER7 without patch
        "hypot": {
         "overflow": {
          "duration": 4.86637e+09,
          "iterations": 6.43196e+08,
          "max": 53.958,
          "min": 7.328,
          "mean": 7.56592
         },
         "higher_two500": {
          "duration": 4.99842e+09,
          "iterations": 3.11012e+08,
          "max": 78.227,
          "min": 15.696,
          "mean": 16.0715
         },
         "subnormal": {
          "duration": 4.99841e+09,
          "iterations": 3.08935e+08,
          "max": 51.392,
          "min": 15.983,
          "mean": 16.1795
         },
         "less_two500": {
          "duration": 5.00108e+09,
          "iterations": 2.99464e+08,
          "max": 73.247,
          "min": 16.416,
          "mean": 16.7001
         },
         "default": {
          "duration": 5.04645e+09,
          "iterations": 3.52608e+08,
          "max": 70.073,
          "min": 13.38,
          "mean": 14.3118
         }
        }
    
      - POWER7 with patch
        "hypot": {
         "overflow": {
          "duration": 4.80785e+09,
          "iterations": 8.00001e+08,
          "max": 66.262,
          "min": 5.888,
          "mean": 6.00981
         },
         "higher_two500": {
          "duration": 4.9859e+09,
          "iterations": 3.39449e+08,
          "max": 5148.44,
          "min": 14.539,
          "mean": 14.6882
         },
         "subnormal": {
          "duration": 4.9905e+09,
          "iterations": 3.28874e+08,
          "max": 64.905,
          "min": 14.971,
          "mean": 15.1745
         },
         "less_two500": {
          "duration": 4.99494e+09,
          "iterations": 3.19755e+08,
          "max": 103.696,
          "min": 14.972,
          "mean": 15.6211
         },
         "default": {
          "duration": 5.03951e+09,
          "iterations": 4.02502e+08,
          "max": 61.008,
          "min": 12.368,
          "mean": 12.5205
         }
        }
    
    Checked on powerpc-linux-gnu (built without --with-cpu, with
    --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
    powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
    and --disable-multi-arch).
    
    	* sysdeps/powerpc/fpu/e_hypot.c (two60, two500, two600, two1022,
    	twoM500, twoM600, two60factor, pdnum): Remove.
    	(TEST_INFO_NAN): Remove macro.
    	(__ieee754_hypot): Replace static variables with inline definition,
    	remove ununsed branches.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
    	(libm-sysdep_routines): Remove e_hypot-* objects.
    	(CFLAGS-e_hypot-power7.c, CFLAGS-e_hypotf-power7.c): Remove rule.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-power7.c: Remove
    	file.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot-ppc64.c: Likewise.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypot.c: Likewise.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-power7.c: Likewise.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf-ppc64.c: Likewise.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypotf.c: Likewise.

commit 24b7f9604925fc646fd09ad8ca3a833c815eb2e6
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Mar 11 17:01:11 2019 +0000

    benchtests: hypot benchmark
    
    Inputs are based on argument reductions from generic and powerpc
    implementation.
    
    	* benchtests/Makefile (bench-math): Add hypot.
    	* benchtests/hypot-inputs: New file.

commit bf7680e9aad7da6fa5d7f7d0c9b96c2afd2e2c06
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Mar 13 17:55:03 2019 +0000

    powerpc: Use generic e_expf
    
    Generic implementation is faster on both power8 and power9:
    
    POWER9:
    - sysdeps/ieee754/flt-32/e_expf.c
      "expf": {
       "workload-spec2017.wrf": {
        "duration": 5.1236e+09,
        "iterations": 7.53344e+08,
        "reciprocal-throughput": 5.9436,
        "latency": 7.65869,
        "max-throughput": 1.68248e+08,
        "min-throughput": 1.30571e+08
       }
      }
    
    - sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S
      "expf": {
       "workload-spec2017.wrf": {
        "duration": 5.14429e+09,
        "iterations": 5.29248e+08,
        "reciprocal-throughput": 8.05372,
        "latency": 11.3863,
        "max-throughput": 1.24166e+08,
        "min-throughput": 8.78249e+07
       }
      }
    
    Checked on powerpc-linux-gnu (built without --with-cpu, with
    --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
    powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
    and --disable-multi-arch).
    
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile
    	(libm-sysdep_routines): Remove e_expf-power8 and expf-ppc64.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-power8.S: Remove
    	file.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf-ppc64.c: Likewise.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/e_expf.c: Likewise.
    	* sysdeps/powerpc/powerpc64/fpu/multiarch/w_expf.c: Likewise.
    	* sysdeps/powerpc/powerpc64/power8/fpu/e_expf.S: Likewise.
    	* sysdeps/powerpc/powerpc64/power8/fpu/w_expf.c: Likewise.

commit f7ef938e4183346165432099ae57e2cd1637b25a
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Fri Mar 22 16:47:34 2019 +0000

    powerpc: Refactor powerpc32 lround/lroundf/llround/llroundf
    
    This patches consolidates all the powerpc llround{f} implementations on
    the generic sysdeps/powerpc/powerpc32/fpu/s_llround{f}.
    
    Checked on powerpc-linux-gnu (built without --with-cpu, with
    --with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
    powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
    and --disable-multi-arch).
    
    	* sysdeps/powerpc/powerpc32/fpu/Makefile
    	[$(subdir) == math] (CFLAGS-s_lround.c): New rule.
    	* sysdeps/powerpc/powerpc32/fpu/s_llround.c (__llround): Add power5+
    	and fctidz optimization.
    	* sysdeps/powerpc/powerpc32/fpu/s_lround.S: Remove file.
    	* sysdeps/powerpc/powerpc32/fpu/s_lround.c: New file.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
    	(CFLAGS-s_llround-power6.c, CFLAGS-s_llround-power5+.c,
    	CFLAGS-s_llround-ppc32.c, CFLAGS-s_lround-ppc32.c,
    	CFLAGS-s_lround-power5+.c): New rule.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power5+.c:
    	New file.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power6.c:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-ppc32.c:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power5+.c:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-ppc32.c:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power5+.S:
    	Remove file.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-power6.S:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_llround-ppc32.S:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-power5+.S:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_lround-ppc32.S:
    	Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S: Likewise.
    	* sysdeps/powerpc/powerpc32/power4/fpu/s_llroundf.S: Likewise.
    	* sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S: Likewise.
    	* sysdeps/powerpc/powerpc32/power5+/fpu/s_llroundf.S: Likewise.
    	* sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S: Likewise.
    	* sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S: Likewise.
    	* sysdeps/powerpc/powerpc32/power6/fpu/s_llroundf.S: Likewise.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]