os/kernelhwsrv/kerneltest/e32test/math/t_vfp.cia
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// e32test\math\t_vfp.cia
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#include "t_vfp.h"
sl@0
    19
#include <u32std.h>
sl@0
    20
sl@0
    21
#define __TEST_VFPV3
sl@0
    22
sl@0
    23
#define _DIE(x)	asm(".word %a0" : : "i" ((TInt)( 0xe7f000f0|((x)&0x0f)|(((x)&0xfff0)<<4) )));
sl@0
    24
#define DIE		_DIE(__LINE__);
sl@0
    25
sl@0
    26
/******************************************************************************
sl@0
    27
 * Control registers
sl@0
    28
 ******************************************************************************/
sl@0
    29
__NAKED__ TUint32 Vfp::Fpscr()
sl@0
    30
	{
sl@0
    31
	VFP_FMRX(,0,VFP_XREG_FPSCR);
sl@0
    32
	__JUMP(,lr);
sl@0
    33
	}
sl@0
    34
sl@0
    35
__NAKED__ void Vfp::SetFpscr(TUint32 /*aVal*/)
sl@0
    36
	{
sl@0
    37
	VFP_FMXR(,VFP_XREG_FPSCR,0);
sl@0
    38
	__JUMP(,lr);
sl@0
    39
	}
sl@0
    40
sl@0
    41
/******************************************************************************
sl@0
    42
 * Single precision operations
sl@0
    43
 ******************************************************************************/
sl@0
    44
__NAKED__ TInt32 Vfp::SRegInt(TInt /*aReg*/)
sl@0
    45
	{
sl@0
    46
	// fall through
sl@0
    47
	}
sl@0
    48
sl@0
    49
__NAKED__ TReal32 Vfp::SReg(TInt /*aReg*/)
sl@0
    50
	{
sl@0
    51
	asm("cmp r0, #31 ");
sl@0
    52
	asm("addls pc, pc, r0, lsl #3 ");
sl@0
    53
	DIE;
sl@0
    54
	VFP_FMRS(CC_AL,0,0);
sl@0
    55
	__JUMP(,lr);
sl@0
    56
	VFP_FMRS(CC_AL,0,1);
sl@0
    57
	__JUMP(,lr);
sl@0
    58
	VFP_FMRS(CC_AL,0,2);
sl@0
    59
	__JUMP(,lr);
sl@0
    60
	VFP_FMRS(CC_AL,0,3);
sl@0
    61
	__JUMP(,lr);
sl@0
    62
	VFP_FMRS(CC_AL,0,4);
sl@0
    63
	__JUMP(,lr);
sl@0
    64
	VFP_FMRS(CC_AL,0,5);
sl@0
    65
	__JUMP(,lr);
sl@0
    66
	VFP_FMRS(CC_AL,0,6);
sl@0
    67
	__JUMP(,lr);
sl@0
    68
	VFP_FMRS(CC_AL,0,7);
sl@0
    69
	__JUMP(,lr);
sl@0
    70
	VFP_FMRS(CC_AL,0,8);
sl@0
    71
	__JUMP(,lr);
sl@0
    72
	VFP_FMRS(CC_AL,0,9);
sl@0
    73
	__JUMP(,lr);
sl@0
    74
	VFP_FMRS(CC_AL,0,10);
sl@0
    75
	__JUMP(,lr);
sl@0
    76
	VFP_FMRS(CC_AL,0,11);
sl@0
    77
	__JUMP(,lr);
sl@0
    78
	VFP_FMRS(CC_AL,0,12);
sl@0
    79
	__JUMP(,lr);
sl@0
    80
	VFP_FMRS(CC_AL,0,13);
sl@0
    81
	__JUMP(,lr);
sl@0
    82
	VFP_FMRS(CC_AL,0,14);
sl@0
    83
	__JUMP(,lr);
sl@0
    84
	VFP_FMRS(CC_AL,0,15);
sl@0
    85
	__JUMP(,lr);
sl@0
    86
	VFP_FMRS(CC_AL,0,16);
sl@0
    87
	__JUMP(,lr);
sl@0
    88
	VFP_FMRS(CC_AL,0,17);
sl@0
    89
	__JUMP(,lr);
sl@0
    90
	VFP_FMRS(CC_AL,0,18);
sl@0
    91
	__JUMP(,lr);
sl@0
    92
	VFP_FMRS(CC_AL,0,19);
sl@0
    93
	__JUMP(,lr);
sl@0
    94
	VFP_FMRS(CC_AL,0,20);
sl@0
    95
	__JUMP(,lr);
sl@0
    96
	VFP_FMRS(CC_AL,0,21);
sl@0
    97
	__JUMP(,lr);
sl@0
    98
	VFP_FMRS(CC_AL,0,22);
sl@0
    99
	__JUMP(,lr);
sl@0
   100
	VFP_FMRS(CC_AL,0,23);
sl@0
   101
	__JUMP(,lr);
sl@0
   102
	VFP_FMRS(CC_AL,0,24);
sl@0
   103
	__JUMP(,lr);
sl@0
   104
	VFP_FMRS(CC_AL,0,25);
sl@0
   105
	__JUMP(,lr);
sl@0
   106
	VFP_FMRS(CC_AL,0,26);
sl@0
   107
	__JUMP(,lr);
sl@0
   108
	VFP_FMRS(CC_AL,0,27);
sl@0
   109
	__JUMP(,lr);
sl@0
   110
	VFP_FMRS(CC_AL,0,28);
sl@0
   111
	__JUMP(,lr);
sl@0
   112
	VFP_FMRS(CC_AL,0,29);
sl@0
   113
	__JUMP(,lr);
sl@0
   114
	VFP_FMRS(CC_AL,0,30);
sl@0
   115
	__JUMP(,lr);
sl@0
   116
	VFP_FMRS(CC_AL,0,31);
sl@0
   117
	__JUMP(,lr);
sl@0
   118
	}
sl@0
   119
sl@0
   120
__NAKED__ void Vfp::SetSReg(TInt32 /*aVal*/, TInt /*aReg*/)
sl@0
   121
	{
sl@0
   122
	// fall through
sl@0
   123
	}
sl@0
   124
sl@0
   125
__NAKED__ void Vfp::SetSReg(TReal32 /*aVal*/, TInt /*aReg*/)
sl@0
   126
	{
sl@0
   127
	asm("cmp r1, #31 ");
sl@0
   128
	asm("addls pc, pc, r1, lsl #3 ");
sl@0
   129
	DIE;
sl@0
   130
	VFP_FMSR(CC_AL,0,0);
sl@0
   131
	__JUMP(,lr);
sl@0
   132
	VFP_FMSR(CC_AL,1,0);
sl@0
   133
	__JUMP(,lr);
sl@0
   134
	VFP_FMSR(CC_AL,2,0);
sl@0
   135
	__JUMP(,lr);
sl@0
   136
	VFP_FMSR(CC_AL,3,0);
sl@0
   137
	__JUMP(,lr);
sl@0
   138
	VFP_FMSR(CC_AL,4,0);
sl@0
   139
	__JUMP(,lr);
sl@0
   140
	VFP_FMSR(CC_AL,5,0);
sl@0
   141
	__JUMP(,lr);
sl@0
   142
	VFP_FMSR(CC_AL,6,0);
sl@0
   143
	__JUMP(,lr);
sl@0
   144
	VFP_FMSR(CC_AL,7,0);
sl@0
   145
	__JUMP(,lr);
sl@0
   146
	VFP_FMSR(CC_AL,8,0);
sl@0
   147
	__JUMP(,lr);
sl@0
   148
	VFP_FMSR(CC_AL,9,0);
sl@0
   149
	__JUMP(,lr);
sl@0
   150
	VFP_FMSR(CC_AL,10,0);
sl@0
   151
	__JUMP(,lr);
sl@0
   152
	VFP_FMSR(CC_AL,11,0);
sl@0
   153
	__JUMP(,lr);
sl@0
   154
	VFP_FMSR(CC_AL,12,0);
sl@0
   155
	__JUMP(,lr);
sl@0
   156
	VFP_FMSR(CC_AL,13,0);
sl@0
   157
	__JUMP(,lr);
sl@0
   158
	VFP_FMSR(CC_AL,14,0);
sl@0
   159
	__JUMP(,lr);
sl@0
   160
	VFP_FMSR(CC_AL,15,0);
sl@0
   161
	__JUMP(,lr);
sl@0
   162
	VFP_FMSR(CC_AL,16,0);
sl@0
   163
	__JUMP(,lr);
sl@0
   164
	VFP_FMSR(CC_AL,17,0);
sl@0
   165
	__JUMP(,lr);
sl@0
   166
	VFP_FMSR(CC_AL,18,0);
sl@0
   167
	__JUMP(,lr);
sl@0
   168
	VFP_FMSR(CC_AL,19,0);
sl@0
   169
	__JUMP(,lr);
sl@0
   170
	VFP_FMSR(CC_AL,20,0);
sl@0
   171
	__JUMP(,lr);
sl@0
   172
	VFP_FMSR(CC_AL,21,0);
sl@0
   173
	__JUMP(,lr);
sl@0
   174
	VFP_FMSR(CC_AL,22,0);
sl@0
   175
	__JUMP(,lr);
sl@0
   176
	VFP_FMSR(CC_AL,23,0);
sl@0
   177
	__JUMP(,lr);
sl@0
   178
	VFP_FMSR(CC_AL,24,0);
sl@0
   179
	__JUMP(,lr);
sl@0
   180
	VFP_FMSR(CC_AL,25,0);
sl@0
   181
	__JUMP(,lr);
sl@0
   182
	VFP_FMSR(CC_AL,26,0);
sl@0
   183
	__JUMP(,lr);
sl@0
   184
	VFP_FMSR(CC_AL,27,0);
sl@0
   185
	__JUMP(,lr);
sl@0
   186
	VFP_FMSR(CC_AL,28,0);
sl@0
   187
	__JUMP(,lr);
sl@0
   188
	VFP_FMSR(CC_AL,29,0);
sl@0
   189
	__JUMP(,lr);
sl@0
   190
	VFP_FMSR(CC_AL,30,0);
sl@0
   191
	__JUMP(,lr);
sl@0
   192
	VFP_FMSR(CC_AL,31,0);
sl@0
   193
	__JUMP(,lr);
sl@0
   194
	}
sl@0
   195
sl@0
   196
__NAKED__ void Vfp::AbsS()
sl@0
   197
	{
sl@0
   198
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   199
	VFP_FABSS(CC_AL,0,1);
sl@0
   200
	__JUMP(,lr);
sl@0
   201
	}
sl@0
   202
sl@0
   203
__NAKED__ void Vfp::AddS()
sl@0
   204
	{
sl@0
   205
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   206
	VFP_FADDS(CC_AL,0,1,2);
sl@0
   207
	__JUMP(,lr);
sl@0
   208
	}
sl@0
   209
sl@0
   210
__NAKED__ void Vfp::CmpS()
sl@0
   211
	{
sl@0
   212
	VFP_FCMPS(CC_AL,0,1);
sl@0
   213
	__JUMP(,lr);
sl@0
   214
	}
sl@0
   215
sl@0
   216
__NAKED__ void Vfp::CmpES()
sl@0
   217
	{
sl@0
   218
	VFP_FCMPES(CC_AL,0,1);
sl@0
   219
	__JUMP(,lr);
sl@0
   220
	}
sl@0
   221
sl@0
   222
__NAKED__ void Vfp::CmpEZS()
sl@0
   223
	{
sl@0
   224
	VFP_FCMPEZS(CC_AL,0);
sl@0
   225
	__JUMP(,lr);
sl@0
   226
	}
sl@0
   227
sl@0
   228
__NAKED__ void Vfp::CmpZS()
sl@0
   229
	{
sl@0
   230
	VFP_FCMPZS(CC_AL,0);
sl@0
   231
	__JUMP(,lr);
sl@0
   232
	}
sl@0
   233
sl@0
   234
__NAKED__ void Vfp::Cpy0S(TInt /*aReg*/)
sl@0
   235
	{
sl@0
   236
	asm("cmp r0, #31 ");
sl@0
   237
	asm("addls pc, pc, r0, lsl #3 ");
sl@0
   238
	DIE;
sl@0
   239
	VFP_FCPYS(CC_AL,0,0);
sl@0
   240
	__JUMP(,lr);
sl@0
   241
	VFP_FCPYS(CC_AL,0,1);
sl@0
   242
	__JUMP(,lr);
sl@0
   243
	VFP_FCPYS(CC_AL,0,2);
sl@0
   244
	__JUMP(,lr);
sl@0
   245
	VFP_FCPYS(CC_AL,0,3);
sl@0
   246
	__JUMP(,lr);
sl@0
   247
	VFP_FCPYS(CC_AL,0,4);
sl@0
   248
	__JUMP(,lr);
sl@0
   249
	VFP_FCPYS(CC_AL,0,5);
sl@0
   250
	__JUMP(,lr);
sl@0
   251
	VFP_FCPYS(CC_AL,0,6);
sl@0
   252
	__JUMP(,lr);
sl@0
   253
	VFP_FCPYS(CC_AL,0,7);
sl@0
   254
	__JUMP(,lr);
sl@0
   255
	VFP_FCPYS(CC_AL,0,8);
sl@0
   256
	__JUMP(,lr);
sl@0
   257
	VFP_FCPYS(CC_AL,0,9);
sl@0
   258
	__JUMP(,lr);
sl@0
   259
	VFP_FCPYS(CC_AL,0,10);
sl@0
   260
	__JUMP(,lr);
sl@0
   261
	VFP_FCPYS(CC_AL,0,11);
sl@0
   262
	__JUMP(,lr);
sl@0
   263
	VFP_FCPYS(CC_AL,0,12);
sl@0
   264
	__JUMP(,lr);
sl@0
   265
	VFP_FCPYS(CC_AL,0,13);
sl@0
   266
	__JUMP(,lr);
sl@0
   267
	VFP_FCPYS(CC_AL,0,14);
sl@0
   268
	__JUMP(,lr);
sl@0
   269
	VFP_FCPYS(CC_AL,0,15);
sl@0
   270
	__JUMP(,lr);
sl@0
   271
	VFP_FCPYS(CC_AL,0,16);
sl@0
   272
	__JUMP(,lr);
sl@0
   273
	VFP_FCPYS(CC_AL,0,17);
sl@0
   274
	__JUMP(,lr);
sl@0
   275
	VFP_FCPYS(CC_AL,0,18);
sl@0
   276
	__JUMP(,lr);
sl@0
   277
	VFP_FCPYS(CC_AL,0,19);
sl@0
   278
	__JUMP(,lr);
sl@0
   279
	VFP_FCPYS(CC_AL,0,20);
sl@0
   280
	__JUMP(,lr);
sl@0
   281
	VFP_FCPYS(CC_AL,0,21);
sl@0
   282
	__JUMP(,lr);
sl@0
   283
	VFP_FCPYS(CC_AL,0,22);
sl@0
   284
	__JUMP(,lr);
sl@0
   285
	VFP_FCPYS(CC_AL,0,23);
sl@0
   286
	__JUMP(,lr);
sl@0
   287
	VFP_FCPYS(CC_AL,0,24);
sl@0
   288
	__JUMP(,lr);
sl@0
   289
	VFP_FCPYS(CC_AL,0,25);
sl@0
   290
	__JUMP(,lr);
sl@0
   291
	VFP_FCPYS(CC_AL,0,26);
sl@0
   292
	__JUMP(,lr);
sl@0
   293
	VFP_FCPYS(CC_AL,0,27);
sl@0
   294
	__JUMP(,lr);
sl@0
   295
	VFP_FCPYS(CC_AL,0,28);
sl@0
   296
	__JUMP(,lr);
sl@0
   297
	VFP_FCPYS(CC_AL,0,29);
sl@0
   298
	__JUMP(,lr);
sl@0
   299
	VFP_FCPYS(CC_AL,0,30);
sl@0
   300
	__JUMP(,lr);
sl@0
   301
	VFP_FCPYS(CC_AL,0,31);
sl@0
   302
	__JUMP(,lr);
sl@0
   303
	}
sl@0
   304
sl@0
   305
__NAKED__ void Vfp::CpyS0(TInt /*aReg*/)
sl@0
   306
	{
sl@0
   307
	asm("cmp r0, #31 ");
sl@0
   308
	asm("addls pc, pc, r0, lsl #3 ");
sl@0
   309
	DIE;
sl@0
   310
	VFP_FCPYS(CC_AL,0,0);
sl@0
   311
	__JUMP(,lr);
sl@0
   312
	VFP_FCPYS(CC_AL,1,0);
sl@0
   313
	__JUMP(,lr);
sl@0
   314
	VFP_FCPYS(CC_AL,2,0);
sl@0
   315
	__JUMP(,lr);
sl@0
   316
	VFP_FCPYS(CC_AL,3,0);
sl@0
   317
	__JUMP(,lr);
sl@0
   318
	VFP_FCPYS(CC_AL,4,0);
sl@0
   319
	__JUMP(,lr);
sl@0
   320
	VFP_FCPYS(CC_AL,5,0);
sl@0
   321
	__JUMP(,lr);
sl@0
   322
	VFP_FCPYS(CC_AL,6,0);
sl@0
   323
	__JUMP(,lr);
sl@0
   324
	VFP_FCPYS(CC_AL,7,0);
sl@0
   325
	__JUMP(,lr);
sl@0
   326
	VFP_FCPYS(CC_AL,8,0);
sl@0
   327
	__JUMP(,lr);
sl@0
   328
	VFP_FCPYS(CC_AL,9,0);
sl@0
   329
	__JUMP(,lr);
sl@0
   330
	VFP_FCPYS(CC_AL,10,0);
sl@0
   331
	__JUMP(,lr);
sl@0
   332
	VFP_FCPYS(CC_AL,11,0);
sl@0
   333
	__JUMP(,lr);
sl@0
   334
	VFP_FCPYS(CC_AL,12,0);
sl@0
   335
	__JUMP(,lr);
sl@0
   336
	VFP_FCPYS(CC_AL,13,0);
sl@0
   337
	__JUMP(,lr);
sl@0
   338
	VFP_FCPYS(CC_AL,14,0);
sl@0
   339
	__JUMP(,lr);
sl@0
   340
	VFP_FCPYS(CC_AL,15,0);
sl@0
   341
	__JUMP(,lr);
sl@0
   342
	VFP_FCPYS(CC_AL,16,0);
sl@0
   343
	__JUMP(,lr);
sl@0
   344
	VFP_FCPYS(CC_AL,17,0);
sl@0
   345
	__JUMP(,lr);
sl@0
   346
	VFP_FCPYS(CC_AL,18,0);
sl@0
   347
	__JUMP(,lr);
sl@0
   348
	VFP_FCPYS(CC_AL,19,0);
sl@0
   349
	__JUMP(,lr);
sl@0
   350
	VFP_FCPYS(CC_AL,20,0);
sl@0
   351
	__JUMP(,lr);
sl@0
   352
	VFP_FCPYS(CC_AL,21,0);
sl@0
   353
	__JUMP(,lr);
sl@0
   354
	VFP_FCPYS(CC_AL,22,0);
sl@0
   355
	__JUMP(,lr);
sl@0
   356
	VFP_FCPYS(CC_AL,23,0);
sl@0
   357
	__JUMP(,lr);
sl@0
   358
	VFP_FCPYS(CC_AL,24,0);
sl@0
   359
	__JUMP(,lr);
sl@0
   360
	VFP_FCPYS(CC_AL,25,0);
sl@0
   361
	__JUMP(,lr);
sl@0
   362
	VFP_FCPYS(CC_AL,26,0);
sl@0
   363
	__JUMP(,lr);
sl@0
   364
	VFP_FCPYS(CC_AL,27,0);
sl@0
   365
	__JUMP(,lr);
sl@0
   366
	VFP_FCPYS(CC_AL,28,0);
sl@0
   367
	__JUMP(,lr);
sl@0
   368
	VFP_FCPYS(CC_AL,29,0);
sl@0
   369
	__JUMP(,lr);
sl@0
   370
	VFP_FCPYS(CC_AL,30,0);
sl@0
   371
	__JUMP(,lr);
sl@0
   372
	VFP_FCPYS(CC_AL,31,0);
sl@0
   373
	__JUMP(,lr);
sl@0
   374
	}
sl@0
   375
sl@0
   376
__NAKED__ void Vfp::DivS()
sl@0
   377
	{
sl@0
   378
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   379
	VFP_FDIVS(CC_AL,0,1,2);
sl@0
   380
	__JUMP(,lr);
sl@0
   381
	}
sl@0
   382
sl@0
   383
__NAKED__ void Vfp::MacS()
sl@0
   384
	{
sl@0
   385
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   386
	VFP_FMACS(CC_AL,0,1,2);
sl@0
   387
	__JUMP(,lr);
sl@0
   388
	}
sl@0
   389
sl@0
   390
__NAKED__ void Vfp::MscS()
sl@0
   391
	{
sl@0
   392
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   393
	VFP_FMSCS(CC_AL,0,1,2);
sl@0
   394
	__JUMP(,lr);
sl@0
   395
	}
sl@0
   396
sl@0
   397
__NAKED__ void Vfp::MulS()
sl@0
   398
	{
sl@0
   399
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   400
	VFP_FMULS(CC_AL,0,1,2);
sl@0
   401
	__JUMP(,lr);
sl@0
   402
	}
sl@0
   403
sl@0
   404
__NAKED__ void Vfp::NegS()
sl@0
   405
	{
sl@0
   406
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   407
	VFP_FNEGS(CC_AL,0,1);
sl@0
   408
	__JUMP(,lr);
sl@0
   409
	}
sl@0
   410
sl@0
   411
__NAKED__ void Vfp::NMacS()
sl@0
   412
	{
sl@0
   413
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   414
	VFP_FNMACS(CC_AL,0,1,2);
sl@0
   415
	__JUMP(,lr);
sl@0
   416
	}
sl@0
   417
sl@0
   418
__NAKED__ void Vfp::NMscS()
sl@0
   419
	{
sl@0
   420
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   421
	VFP_FNMSCS(CC_AL,0,1,2);
sl@0
   422
	__JUMP(,lr);
sl@0
   423
	}
sl@0
   424
sl@0
   425
__NAKED__ void Vfp::NMulS()
sl@0
   426
	{
sl@0
   427
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   428
	VFP_FNMULS(CC_AL,0,1,2);
sl@0
   429
	__JUMP(,lr);
sl@0
   430
	}
sl@0
   431
sl@0
   432
__NAKED__ void Vfp::SqrtS()
sl@0
   433
	{
sl@0
   434
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   435
	VFP_FSQRTS(CC_AL,0,1);
sl@0
   436
	__JUMP(,lr);
sl@0
   437
	}
sl@0
   438
sl@0
   439
__NAKED__ void Vfp::SubS()
sl@0
   440
	{
sl@0
   441
	asm("nop ");			// so that RVCT doesn't complain about branches to non-code symbols
sl@0
   442
	VFP_FSUBS(CC_AL,0,1,2);
sl@0
   443
	__JUMP(,lr);
sl@0
   444
	}
sl@0
   445
sl@0
   446
sl@0
   447
sl@0
   448
sl@0
   449
/******************************************************************************
sl@0
   450
 * Double precision operations
sl@0
   451
 ******************************************************************************/
sl@0
   452
__NAKED__ TInt64 Vfp::DRegInt(TInt /*aReg*/)
sl@0
   453
	{
sl@0
   454
	// fall through
sl@0
   455
	}
sl@0
   456
sl@0
   457
__NAKED__ TReal64 Vfp::DReg(TInt /*aReg*/)
sl@0
   458
	{
sl@0
   459
#ifdef __TEST_VFPV3
sl@0
   460
	asm("cmp r0, #31 ");
sl@0
   461
#else 
sl@0
   462
	asm("cmp r0, #15 ");
sl@0
   463
#endif 
sl@0
   464
	asm("addls r0, r0, r0, lsl #1 ");
sl@0
   465
	asm("addls pc, pc, r0, lsl #2 ");
sl@0
   466
	DIE;
sl@0
   467
sl@0
   468
	// test 
sl@0
   469
	// VFP_FLDD(CC_AL,4,5,0); 
sl@0
   470
sl@0
   471
	VFP_FMRDL(CC_AL,0,0);
sl@0
   472
	VFP_FMRDH(CC_AL,1,0);
sl@0
   473
	asm("b 0f ");
sl@0
   474
	VFP_FMRDL(CC_AL,0,1);
sl@0
   475
	VFP_FMRDH(CC_AL,1,1);
sl@0
   476
	asm("b 0f ");
sl@0
   477
	VFP_FMRDL(CC_AL,0,2);
sl@0
   478
	VFP_FMRDH(CC_AL,1,2);
sl@0
   479
	asm("b 0f ");
sl@0
   480
	VFP_FMRDL(CC_AL,0,3);
sl@0
   481
	VFP_FMRDH(CC_AL,1,3);
sl@0
   482
	asm("b 0f ");
sl@0
   483
	VFP_FMRDL(CC_AL,0,4);
sl@0
   484
	VFP_FMRDH(CC_AL,1,4);
sl@0
   485
	asm("b 0f ");
sl@0
   486
	VFP_FMRDL(CC_AL,0,5);
sl@0
   487
	VFP_FMRDH(CC_AL,1,5);
sl@0
   488
	asm("b 0f ");
sl@0
   489
	VFP_FMRDL(CC_AL,0,6);
sl@0
   490
	VFP_FMRDH(CC_AL,1,6);
sl@0
   491
	asm("b 0f ");
sl@0
   492
	VFP_FMRDL(CC_AL,0,7);
sl@0
   493
	VFP_FMRDH(CC_AL,1,7);
sl@0
   494
	asm("b 0f ");
sl@0
   495
	VFP_FMRDL(CC_AL,0,8);
sl@0
   496
	VFP_FMRDH(CC_AL,1,8);
sl@0
   497
	asm("b 0f ");
sl@0
   498
	VFP_FMRDL(CC_AL,0,9);
sl@0
   499
	VFP_FMRDH(CC_AL,1,9);
sl@0
   500
	asm("b 0f ");
sl@0
   501
	VFP_FMRDL(CC_AL,0,10);
sl@0
   502
	VFP_FMRDH(CC_AL,1,10);
sl@0
   503
	asm("b 0f ");
sl@0
   504
	VFP_FMRDL(CC_AL,0,11);
sl@0
   505
	VFP_FMRDH(CC_AL,1,11);
sl@0
   506
	asm("b 0f ");
sl@0
   507
	VFP_FMRDL(CC_AL,0,12);
sl@0
   508
	VFP_FMRDH(CC_AL,1,12);
sl@0
   509
	asm("b 0f ");
sl@0
   510
	VFP_FMRDL(CC_AL,0,13);
sl@0
   511
	VFP_FMRDH(CC_AL,1,13);
sl@0
   512
	asm("b 0f ");
sl@0
   513
	VFP_FMRDL(CC_AL,0,14);
sl@0
   514
	VFP_FMRDH(CC_AL,1,14);
sl@0
   515
	asm("b 0f ");
sl@0
   516
	VFP_FMRDL(CC_AL,0,15);
sl@0
   517
	VFP_FMRDH(CC_AL,1,15);
sl@0
   518
	asm("b 0f ");
sl@0
   519
sl@0
   520
#ifdef __TEST_VFPV3
sl@0
   521
	VFP_FMRDL(CC_AL,0,16);
sl@0
   522
	VFP_FMRDH(CC_AL,1,16);
sl@0
   523
	asm("b 0f ");
sl@0
   524
	VFP_FMRDL(CC_AL,0,17);
sl@0
   525
	VFP_FMRDH(CC_AL,1,17);
sl@0
   526
	asm("b 0f ");
sl@0
   527
	VFP_FMRDL(CC_AL,0,18);
sl@0
   528
	VFP_FMRDH(CC_AL,1,18);
sl@0
   529
	asm("b 0f ");
sl@0
   530
	VFP_FMRDL(CC_AL,0,19);
sl@0
   531
	VFP_FMRDH(CC_AL,1,19);
sl@0
   532
	asm("b 0f ");
sl@0
   533
	VFP_FMRDL(CC_AL,0,20);
sl@0
   534
	VFP_FMRDH(CC_AL,1,20);
sl@0
   535
	asm("b 0f ");
sl@0
   536
	VFP_FMRDL(CC_AL,0,21);
sl@0
   537
	VFP_FMRDH(CC_AL,1,21);
sl@0
   538
	asm("b 0f ");
sl@0
   539
	VFP_FMRDL(CC_AL,0,22);
sl@0
   540
	VFP_FMRDH(CC_AL,1,22);
sl@0
   541
	asm("b 0f ");
sl@0
   542
	VFP_FMRDL(CC_AL,0,23);
sl@0
   543
	VFP_FMRDH(CC_AL,1,23);
sl@0
   544
	asm("b 0f ");
sl@0
   545
	VFP_FMRDL(CC_AL,0,24);
sl@0
   546
	VFP_FMRDH(CC_AL,1,24);
sl@0
   547
	asm("b 0f ");
sl@0
   548
	VFP_FMRDL(CC_AL,0,25);
sl@0
   549
	VFP_FMRDH(CC_AL,1,25);
sl@0
   550
	asm("b 0f ");
sl@0
   551
	VFP_FMRDL(CC_AL,0,26);
sl@0
   552
	VFP_FMRDH(CC_AL,1,26);
sl@0
   553
	asm("b 0f ");
sl@0
   554
	VFP_FMRDL(CC_AL,0,27);
sl@0
   555
	VFP_FMRDH(CC_AL,1,27);
sl@0
   556
	asm("b 0f ");
sl@0
   557
	VFP_FMRDL(CC_AL,0,28);
sl@0
   558
	VFP_FMRDH(CC_AL,1,28);
sl@0
   559
	asm("b 0f ");
sl@0
   560
	VFP_FMRDL(CC_AL,0,29);
sl@0
   561
	VFP_FMRDH(CC_AL,1,29);
sl@0
   562
	asm("b 0f ");
sl@0
   563
	VFP_FMRDL(CC_AL,0,30);
sl@0
   564
	VFP_FMRDH(CC_AL,1,30);
sl@0
   565
	asm("b 0f ");
sl@0
   566
	VFP_FMRDL(CC_AL,0,31);
sl@0
   567
	VFP_FMRDH(CC_AL,1,31);
sl@0
   568
#endif // __TEST_VFPV3
sl@0
   569
sl@0
   570
	asm("0: ");
sl@0
   571
#ifdef __DOUBLE_WORDS_SWAPPED__
sl@0
   572
	asm("mov r2, r0 ");
sl@0
   573
	asm("mov r0, r1 ");
sl@0
   574
	asm("mov r1, r2 ");
sl@0
   575
#endif
sl@0
   576
	__JUMP(,lr);
sl@0
   577
	}
sl@0
   578
sl@0
   579
__NAKED__ void Vfp::SetDReg(TInt64 /*aVal*/, TInt /*aReg*/)
sl@0
   580
	{
sl@0
   581
	// fall through
sl@0
   582
	}
sl@0
   583
sl@0
   584
__NAKED__ void Vfp::SetDReg(TReal64 /*aVal*/, TInt /*aReg*/)
sl@0
   585
	{
sl@0
   586
#ifdef __DOUBLE_WORDS_SWAPPED__
sl@0
   587
	asm("mov r3, r0 ");
sl@0
   588
	asm("mov r0, r1 ");
sl@0
   589
	asm("mov r1, r3 ");
sl@0
   590
#endif
sl@0
   591
#ifdef __TEST_VFPV3
sl@0
   592
	asm("cmp r2, #31 ");
sl@0
   593
#else 
sl@0
   594
	asm("cmp r2, #15 ");
sl@0
   595
#endif 
sl@0
   596
	asm("addls r2, r2, r2, lsl #1 ");
sl@0
   597
	asm("addls pc, pc, r2, lsl #2 ");
sl@0
   598
	DIE;
sl@0
   599
	VFP_FMDLR(CC_AL,0,0);
sl@0
   600
	VFP_FMDHR(CC_AL,0,1);
sl@0
   601
	__JUMP(,lr);
sl@0
   602
	VFP_FMDLR(CC_AL,1,0);
sl@0
   603
	VFP_FMDHR(CC_AL,1,1);
sl@0
   604
	__JUMP(,lr);
sl@0
   605
	VFP_FMDLR(CC_AL,2,0);
sl@0
   606
	VFP_FMDHR(CC_AL,2,1);
sl@0
   607
	__JUMP(,lr);
sl@0
   608
	VFP_FMDLR(CC_AL,3,0);
sl@0
   609
	VFP_FMDHR(CC_AL,3,1);
sl@0
   610
	__JUMP(,lr);
sl@0
   611
	VFP_FMDLR(CC_AL,4,0);
sl@0
   612
	VFP_FMDHR(CC_AL,4,1);
sl@0
   613
	__JUMP(,lr);
sl@0
   614
	VFP_FMDLR(CC_AL,5,0);
sl@0
   615
	VFP_FMDHR(CC_AL,5,1);
sl@0
   616
	__JUMP(,lr);
sl@0
   617
	VFP_FMDLR(CC_AL,6,0);
sl@0
   618
	VFP_FMDHR(CC_AL,6,1);
sl@0
   619
	__JUMP(,lr);
sl@0
   620
	VFP_FMDLR(CC_AL,7,0);
sl@0
   621
	VFP_FMDHR(CC_AL,7,1);
sl@0
   622
	__JUMP(,lr);
sl@0
   623
	VFP_FMDLR(CC_AL,8,0);
sl@0
   624
	VFP_FMDHR(CC_AL,8,1);
sl@0
   625
	__JUMP(,lr);
sl@0
   626
	VFP_FMDLR(CC_AL,9,0);
sl@0
   627
	VFP_FMDHR(CC_AL,9,1);
sl@0
   628
	__JUMP(,lr);
sl@0
   629
	VFP_FMDLR(CC_AL,10,0);
sl@0
   630
	VFP_FMDHR(CC_AL,10,1);
sl@0
   631
	__JUMP(,lr);
sl@0
   632
	VFP_FMDLR(CC_AL,11,0);
sl@0
   633
	VFP_FMDHR(CC_AL,11,1);
sl@0
   634
	__JUMP(,lr);
sl@0
   635
	VFP_FMDLR(CC_AL,12,0);
sl@0
   636
	VFP_FMDHR(CC_AL,12,1);
sl@0
   637
	__JUMP(,lr);
sl@0
   638
	VFP_FMDLR(CC_AL,13,0);
sl@0
   639
	VFP_FMDHR(CC_AL,13,1);
sl@0
   640
	__JUMP(,lr);
sl@0
   641
	VFP_FMDLR(CC_AL,14,0);
sl@0
   642
	VFP_FMDHR(CC_AL,14,1);
sl@0
   643
	__JUMP(,lr);
sl@0
   644
	VFP_FMDLR(CC_AL,15,0);
sl@0
   645
	VFP_FMDHR(CC_AL,15,1);
sl@0
   646
	__JUMP(,lr);
sl@0
   647
#ifdef __TEST_VFPV3
sl@0
   648
	VFP_FMDLR(CC_AL,16,0);
sl@0
   649
	VFP_FMDHR(CC_AL,16,1);
sl@0
   650
	__JUMP(,lr);
sl@0
   651
	VFP_FMDLR(CC_AL,17,0);
sl@0
   652
	VFP_FMDHR(CC_AL,17,1);
sl@0
   653
	__JUMP(,lr);
sl@0
   654
	VFP_FMDLR(CC_AL,18,0);
sl@0
   655
	VFP_FMDHR(CC_AL,18,1);
sl@0
   656
	__JUMP(,lr);
sl@0
   657
	VFP_FMDLR(CC_AL,19,0);
sl@0
   658
	VFP_FMDHR(CC_AL,19,1);
sl@0
   659
	__JUMP(,lr);
sl@0
   660
	VFP_FMDLR(CC_AL,20,0);
sl@0
   661
	VFP_FMDHR(CC_AL,20,1);
sl@0
   662
	__JUMP(,lr);
sl@0
   663
	VFP_FMDLR(CC_AL,21,0);
sl@0
   664
	VFP_FMDHR(CC_AL,21,1);
sl@0
   665
	__JUMP(,lr);
sl@0
   666
	VFP_FMDLR(CC_AL,22,0);
sl@0
   667
	VFP_FMDHR(CC_AL,22,1);
sl@0
   668
	__JUMP(,lr);
sl@0
   669
	VFP_FMDLR(CC_AL,23,0);
sl@0
   670
	VFP_FMDHR(CC_AL,23,1);
sl@0
   671
	__JUMP(,lr);
sl@0
   672
	VFP_FMDLR(CC_AL,24,0);
sl@0
   673
	VFP_FMDHR(CC_AL,24,1);
sl@0
   674
	__JUMP(,lr);
sl@0
   675
	VFP_FMDLR(CC_AL,25,0);
sl@0
   676
	VFP_FMDHR(CC_AL,25,1);
sl@0
   677
	__JUMP(,lr);
sl@0
   678
	VFP_FMDLR(CC_AL,26,0);
sl@0
   679
	VFP_FMDHR(CC_AL,26,1);
sl@0
   680
	__JUMP(,lr);
sl@0
   681
	VFP_FMDLR(CC_AL,27,0);
sl@0
   682
	VFP_FMDHR(CC_AL,27,1);
sl@0
   683
	__JUMP(,lr);
sl@0
   684
	VFP_FMDLR(CC_AL,28,0);
sl@0
   685
	VFP_FMDHR(CC_AL,28,1);
sl@0
   686
	__JUMP(,lr);
sl@0
   687
	VFP_FMDLR(CC_AL,29,0);
sl@0
   688
	VFP_FMDHR(CC_AL,29,1);
sl@0
   689
	__JUMP(,lr);
sl@0
   690
	VFP_FMDLR(CC_AL,30,0);
sl@0
   691
	VFP_FMDHR(CC_AL,30,1);
sl@0
   692
	__JUMP(,lr);
sl@0
   693
	VFP_FMDLR(CC_AL,31,0);
sl@0
   694
	VFP_FMDHR(CC_AL,31,1);
sl@0
   695
	__JUMP(,lr);
sl@0
   696
#endif // __TEST_VFPV3
sl@0
   697
	}
sl@0
   698
sl@0
   699
__NAKED__ void Vfp::AbsD()
sl@0
   700
	{
sl@0
   701
	VFP_FABSD(,0,1);
sl@0
   702
	__JUMP(,lr);
sl@0
   703
	}
sl@0
   704
sl@0
   705
__NAKED__ void Vfp::AddD()
sl@0
   706
	{
sl@0
   707
	VFP_FADDD(,0,1,2);
sl@0
   708
	__JUMP(,lr);
sl@0
   709
	}
sl@0
   710
sl@0
   711
__NAKED__ void Vfp::CmpD()
sl@0
   712
	{
sl@0
   713
	VFP_FCMPD(,0,1);
sl@0
   714
	__JUMP(,lr);
sl@0
   715
	}
sl@0
   716
sl@0
   717
__NAKED__ void Vfp::CmpED()
sl@0
   718
	{
sl@0
   719
	VFP_FCMPED(,0,1);
sl@0
   720
	__JUMP(,lr);
sl@0
   721
	}
sl@0
   722
sl@0
   723
__NAKED__ void Vfp::CmpEZD()
sl@0
   724
	{
sl@0
   725
	VFP_FCMPEZD(,0);
sl@0
   726
	__JUMP(,lr);
sl@0
   727
	}
sl@0
   728
sl@0
   729
__NAKED__ void Vfp::CmpZD()
sl@0
   730
	{
sl@0
   731
	VFP_FCMPZD(,0);
sl@0
   732
	__JUMP(,lr);
sl@0
   733
	}
sl@0
   734
sl@0
   735
__NAKED__ void Vfp::Cpy0D(TInt /*aReg*/)
sl@0
   736
	{
sl@0
   737
	asm("cmp r0, #15 ");
sl@0
   738
	asm("addls pc, pc, r0, lsl #3 ");
sl@0
   739
	DIE;
sl@0
   740
	VFP_FCPYD(,0,0);
sl@0
   741
	__JUMP(,lr);
sl@0
   742
	VFP_FCPYD(,0,1);
sl@0
   743
	__JUMP(,lr);
sl@0
   744
	VFP_FCPYD(,0,2);
sl@0
   745
	__JUMP(,lr);
sl@0
   746
	VFP_FCPYD(,0,3);
sl@0
   747
	__JUMP(,lr);
sl@0
   748
	VFP_FCPYD(,0,4);
sl@0
   749
	__JUMP(,lr);
sl@0
   750
	VFP_FCPYD(,0,5);
sl@0
   751
	__JUMP(,lr);
sl@0
   752
	VFP_FCPYD(,0,6);
sl@0
   753
	__JUMP(,lr);
sl@0
   754
	VFP_FCPYD(,0,7);
sl@0
   755
	__JUMP(,lr);
sl@0
   756
	VFP_FCPYD(,0,8);
sl@0
   757
	__JUMP(,lr);
sl@0
   758
	VFP_FCPYD(,0,9);
sl@0
   759
	__JUMP(,lr);
sl@0
   760
	VFP_FCPYD(,0,10);
sl@0
   761
	__JUMP(,lr);
sl@0
   762
	VFP_FCPYD(,0,11);
sl@0
   763
	__JUMP(,lr);
sl@0
   764
	VFP_FCPYD(,0,12);
sl@0
   765
	__JUMP(,lr);
sl@0
   766
	VFP_FCPYD(,0,13);
sl@0
   767
	__JUMP(,lr);
sl@0
   768
	VFP_FCPYD(,0,14);
sl@0
   769
	__JUMP(,lr);
sl@0
   770
	VFP_FCPYD(,0,15);
sl@0
   771
	__JUMP(,lr);
sl@0
   772
	}
sl@0
   773
sl@0
   774
__NAKED__ void Vfp::CpyD0(TInt /*aReg*/)
sl@0
   775
	{
sl@0
   776
	asm("cmp r0, #15 ");
sl@0
   777
	asm("addls pc, pc, r0, lsl #3 ");
sl@0
   778
	DIE;
sl@0
   779
	VFP_FCPYD(,0,0);
sl@0
   780
	__JUMP(,lr);
sl@0
   781
	VFP_FCPYD(,1,0);
sl@0
   782
	__JUMP(,lr);
sl@0
   783
	VFP_FCPYD(,2,0);
sl@0
   784
	__JUMP(,lr);
sl@0
   785
	VFP_FCPYD(,3,0);
sl@0
   786
	__JUMP(,lr);
sl@0
   787
	VFP_FCPYD(,4,0);
sl@0
   788
	__JUMP(,lr);
sl@0
   789
	VFP_FCPYD(,5,0);
sl@0
   790
	__JUMP(,lr);
sl@0
   791
	VFP_FCPYD(,6,0);
sl@0
   792
	__JUMP(,lr);
sl@0
   793
	VFP_FCPYD(,7,0);
sl@0
   794
	__JUMP(,lr);
sl@0
   795
	VFP_FCPYD(,8,0);
sl@0
   796
	__JUMP(,lr);
sl@0
   797
	VFP_FCPYD(,9,0);
sl@0
   798
	__JUMP(,lr);
sl@0
   799
	VFP_FCPYD(,10,0);
sl@0
   800
	__JUMP(,lr);
sl@0
   801
	VFP_FCPYD(,11,0);
sl@0
   802
	__JUMP(,lr);
sl@0
   803
	VFP_FCPYD(,12,0);
sl@0
   804
	__JUMP(,lr);
sl@0
   805
	VFP_FCPYD(,13,0);
sl@0
   806
	__JUMP(,lr);
sl@0
   807
	VFP_FCPYD(,14,0);
sl@0
   808
	__JUMP(,lr);
sl@0
   809
	VFP_FCPYD(,15,0);
sl@0
   810
	__JUMP(,lr);
sl@0
   811
	}
sl@0
   812
sl@0
   813
__NAKED__ void Vfp::DivD()
sl@0
   814
	{
sl@0
   815
	VFP_FDIVD(,0,1,2);
sl@0
   816
	__JUMP(,lr);
sl@0
   817
	}
sl@0
   818
sl@0
   819
__NAKED__ void Vfp::MacD()
sl@0
   820
	{
sl@0
   821
	VFP_FMACD(,0,1,2);
sl@0
   822
	__JUMP(,lr);
sl@0
   823
	}
sl@0
   824
sl@0
   825
__NAKED__ void Vfp::MscD()
sl@0
   826
	{
sl@0
   827
	VFP_FMSCD(,0,1,2);
sl@0
   828
	__JUMP(,lr);
sl@0
   829
	}
sl@0
   830
sl@0
   831
__NAKED__ void Vfp::MulD()
sl@0
   832
	{
sl@0
   833
	VFP_FMULD(,0,1,2);
sl@0
   834
	__JUMP(,lr);
sl@0
   835
	}
sl@0
   836
sl@0
   837
__NAKED__ void Vfp::NegD()
sl@0
   838
	{
sl@0
   839
	VFP_FNEGD(,0,1);
sl@0
   840
	__JUMP(,lr);
sl@0
   841
	}
sl@0
   842
sl@0
   843
__NAKED__ void Vfp::NMacD()
sl@0
   844
	{
sl@0
   845
	VFP_FNMACD(,0,1,2);
sl@0
   846
	__JUMP(,lr);
sl@0
   847
	}
sl@0
   848
sl@0
   849
__NAKED__ void Vfp::NMscD()
sl@0
   850
	{
sl@0
   851
	VFP_FNMSCD(,0,1,2);
sl@0
   852
	__JUMP(,lr);
sl@0
   853
	}
sl@0
   854
sl@0
   855
__NAKED__ void Vfp::NMulD()
sl@0
   856
	{
sl@0
   857
	VFP_FNMULD(,0,1,2);
sl@0
   858
	__JUMP(,lr);
sl@0
   859
	}
sl@0
   860
sl@0
   861
__NAKED__ void Vfp::SqrtD()
sl@0
   862
	{
sl@0
   863
	VFP_FSQRTD(,0,1);
sl@0
   864
	__JUMP(,lr);
sl@0
   865
	}
sl@0
   866
sl@0
   867
__NAKED__ void Vfp::SubD()
sl@0
   868
	{
sl@0
   869
	VFP_FSUBD(,0,1,2);
sl@0
   870
	__JUMP(,lr);
sl@0
   871
	}
sl@0
   872
sl@0
   873
sl@0
   874
/******************************************************************************
sl@0
   875
 * Conversion operations
sl@0
   876
 ******************************************************************************/
sl@0
   877
__NAKED__ void Vfp::CvtDS()
sl@0
   878
	{
sl@0
   879
	VFP_FCVTDS(CC_AL,0,2);
sl@0
   880
	__JUMP(,lr);
sl@0
   881
	}
sl@0
   882
sl@0
   883
__NAKED__ void Vfp::CvtSD()
sl@0
   884
	{
sl@0
   885
	VFP_FCVTSD(CC_AL,0,1);
sl@0
   886
	__JUMP(,lr);
sl@0
   887
	}
sl@0
   888
sl@0
   889
__NAKED__ void Vfp::SitoD()
sl@0
   890
	{
sl@0
   891
	VFP_FSITOD(CC_AL,0,2);
sl@0
   892
	__JUMP(,lr);
sl@0
   893
	}
sl@0
   894
sl@0
   895
__NAKED__ void Vfp::SitoS()
sl@0
   896
	{
sl@0
   897
	VFP_FSITOS(CC_AL,0,2);
sl@0
   898
	__JUMP(,lr);
sl@0
   899
	}
sl@0
   900
sl@0
   901
__NAKED__ void Vfp::TosiD()
sl@0
   902
	{
sl@0
   903
	VFP_FTOSID(CC_AL,0,1);
sl@0
   904
	__JUMP(,lr);
sl@0
   905
	}
sl@0
   906
sl@0
   907
__NAKED__ void Vfp::TosiZD()
sl@0
   908
	{
sl@0
   909
	VFP_FTOSIZD(CC_AL,0,1);
sl@0
   910
	__JUMP(,lr);
sl@0
   911
	}
sl@0
   912
sl@0
   913
__NAKED__ void Vfp::TosiS()
sl@0
   914
	{
sl@0
   915
	VFP_FTOSIS(CC_AL,0,2);
sl@0
   916
	__JUMP(,lr);
sl@0
   917
	}
sl@0
   918
sl@0
   919
__NAKED__ void Vfp::TosiZS()
sl@0
   920
	{
sl@0
   921
	VFP_FTOSIZS(CC_AL,0,2);
sl@0
   922
	__JUMP(,lr);
sl@0
   923
	}
sl@0
   924
sl@0
   925
__NAKED__ void Vfp::UitoD()
sl@0
   926
	{
sl@0
   927
	VFP_FUITOD(CC_AL,0,2);
sl@0
   928
	__JUMP(,lr);
sl@0
   929
	}
sl@0
   930
sl@0
   931
__NAKED__ void Vfp::UitoS()
sl@0
   932
	{
sl@0
   933
	VFP_FUITOS(CC_AL,0,2);
sl@0
   934
	__JUMP(,lr);
sl@0
   935
	}
sl@0
   936
sl@0
   937
__NAKED__ void Vfp::TouiD()
sl@0
   938
	{
sl@0
   939
	VFP_FTOUID(CC_AL,0,1);
sl@0
   940
	__JUMP(,lr);
sl@0
   941
	}
sl@0
   942
sl@0
   943
__NAKED__ void Vfp::TouiZD()
sl@0
   944
	{
sl@0
   945
	VFP_FTOUIZD(CC_AL,0,1);
sl@0
   946
	__JUMP(,lr);
sl@0
   947
	}
sl@0
   948
sl@0
   949
__NAKED__ void Vfp::TouiS()
sl@0
   950
	{
sl@0
   951
	VFP_FTOUIS(CC_AL,0,2);
sl@0
   952
	__JUMP(,lr);
sl@0
   953
	}
sl@0
   954
sl@0
   955
__NAKED__ void Vfp::TouiZS()
sl@0
   956
	{
sl@0
   957
	VFP_FTOUIZS(CC_AL,0,2);
sl@0
   958
	__JUMP(,lr);
sl@0
   959
	}
sl@0
   960
sl@0
   961
#ifdef __TEST_VFPV3
sl@0
   962
__NAKED__ void Vfp::ToFixedS(TInt /*aBits*/)
sl@0
   963
	{
sl@0
   964
	asm("cmp r0, #15 ");
sl@0
   965
	asm("addls pc, pc, r0, lsl #3 ");
sl@0
   966
	DIE;
sl@0
   967
	VFP_VCT_S32_F32(CC_AL,0,0);
sl@0
   968
	__JUMP(,lr);
sl@0
   969
	VFP_VCT_S32_F32(CC_AL,0,1);
sl@0
   970
	__JUMP(,lr);
sl@0
   971
	VFP_VCT_S32_F32(CC_AL,0,2);
sl@0
   972
	__JUMP(,lr);
sl@0
   973
	VFP_VCT_S32_F32(CC_AL,0,3);
sl@0
   974
	__JUMP(,lr);
sl@0
   975
	VFP_VCT_S32_F32(CC_AL,0,4);
sl@0
   976
	__JUMP(,lr);
sl@0
   977
	VFP_VCT_S32_F32(CC_AL,0,5);
sl@0
   978
	__JUMP(,lr);
sl@0
   979
	VFP_VCT_S32_F32(CC_AL,0,6);
sl@0
   980
	__JUMP(,lr);
sl@0
   981
	VFP_VCT_S32_F32(CC_AL,0,7);
sl@0
   982
	__JUMP(,lr);
sl@0
   983
	VFP_VCT_S32_F32(CC_AL,0,8);
sl@0
   984
	__JUMP(,lr);
sl@0
   985
	VFP_VCT_S32_F32(CC_AL,0,9);
sl@0
   986
	__JUMP(,lr);
sl@0
   987
	VFP_VCT_S32_F32(CC_AL,0,10);
sl@0
   988
	__JUMP(,lr);
sl@0
   989
	VFP_VCT_S32_F32(CC_AL,0,11);
sl@0
   990
	__JUMP(,lr);
sl@0
   991
	VFP_VCT_S32_F32(CC_AL,0,12);
sl@0
   992
	__JUMP(,lr);
sl@0
   993
	VFP_VCT_S32_F32(CC_AL,0,13);
sl@0
   994
	__JUMP(,lr);
sl@0
   995
	VFP_VCT_S32_F32(CC_AL,0,14);
sl@0
   996
	__JUMP(,lr);
sl@0
   997
	VFP_VCT_S32_F32(CC_AL,0,15);
sl@0
   998
	__JUMP(,lr);
sl@0
   999
	}
sl@0
  1000
sl@0
  1001
__NAKED__ void Vfp::FromFixedS(TInt /*aBits*/)
sl@0
  1002
	{
sl@0
  1003
	asm("cmp r0, #15 ");
sl@0
  1004
	asm("addls pc, pc, r0, lsl #3 ");
sl@0
  1005
	DIE;
sl@0
  1006
	VFP_VCT_F32_S32(CC_AL,0,0);
sl@0
  1007
	__JUMP(,lr);
sl@0
  1008
	VFP_VCT_F32_S32(CC_AL,0,1);
sl@0
  1009
	__JUMP(,lr);
sl@0
  1010
	VFP_VCT_F32_S32(CC_AL,0,2);
sl@0
  1011
	__JUMP(,lr);
sl@0
  1012
	VFP_VCT_F32_S32(CC_AL,0,3);
sl@0
  1013
	__JUMP(,lr);
sl@0
  1014
	VFP_VCT_F32_S32(CC_AL,0,4);
sl@0
  1015
	__JUMP(,lr);
sl@0
  1016
	VFP_VCT_F32_S32(CC_AL,0,5);
sl@0
  1017
	__JUMP(,lr);
sl@0
  1018
	VFP_VCT_F32_S32(CC_AL,0,6);
sl@0
  1019
	__JUMP(,lr);
sl@0
  1020
	VFP_VCT_F32_S32(CC_AL,0,7);
sl@0
  1021
	__JUMP(,lr);
sl@0
  1022
	VFP_VCT_F32_S32(CC_AL,0,8);
sl@0
  1023
	__JUMP(,lr);
sl@0
  1024
	VFP_VCT_F32_S32(CC_AL,0,9);
sl@0
  1025
	__JUMP(,lr);
sl@0
  1026
	VFP_VCT_F32_S32(CC_AL,0,10);
sl@0
  1027
	__JUMP(,lr);
sl@0
  1028
	VFP_VCT_F32_S32(CC_AL,0,11);
sl@0
  1029
	__JUMP(,lr);
sl@0
  1030
	VFP_VCT_F32_S32(CC_AL,0,12);
sl@0
  1031
	__JUMP(,lr);
sl@0
  1032
	VFP_VCT_F32_S32(CC_AL,0,13);
sl@0
  1033
	__JUMP(,lr);
sl@0
  1034
	VFP_VCT_F32_S32(CC_AL,0,14);
sl@0
  1035
	__JUMP(,lr);
sl@0
  1036
	VFP_VCT_F32_S32(CC_AL,0,15);
sl@0
  1037
	__JUMP(,lr);
sl@0
  1038
	}
sl@0
  1039
sl@0
  1040
sl@0
  1041
// S0=2
sl@0
  1042
__NAKED__ void Vfp::TconstS2()
sl@0
  1043
	{
sl@0
  1044
	asm("nop "); 
sl@0
  1045
	VFP_VMOV_IMM(CC_AL,0,0,0);
sl@0
  1046
	__JUMP(,lr);
sl@0
  1047
	} 
sl@0
  1048
sl@0
  1049
// D0=2
sl@0
  1050
__NAKED__ void Vfp::TconstD2()
sl@0
  1051
	{ 
sl@0
  1052
	asm("nop ");
sl@0
  1053
	VFP_VMOV_IMM(CC_AL,1,0,0);
sl@0
  1054
	__JUMP(,lr);
sl@0
  1055
	} 
sl@0
  1056
sl@0
  1057
// S0=2.875
sl@0
  1058
__NAKED__ void Vfp::TconstS2_8()
sl@0
  1059
	{ 
sl@0
  1060
	asm("nop ");
sl@0
  1061
	VFP_VMOV_IMM(CC_AL,0,0,0x7);
sl@0
  1062
	__JUMP(,lr);
sl@0
  1063
	} 
sl@0
  1064
sl@0
  1065
// D0=2.875
sl@0
  1066
__NAKED__ void Vfp::TconstD2_8()
sl@0
  1067
	{ 
sl@0
  1068
	asm("nop ");
sl@0
  1069
	VFP_VMOV_IMM(CC_AL,1,0,0x7);
sl@0
  1070
	__JUMP(,lr);
sl@0
  1071
	} 
sl@0
  1072
sl@0
  1073
sl@0
  1074
sl@0
  1075
// Neon test instructions
sl@0
  1076
sl@0
  1077
__NAKED__ TInt NeonWithF2(TAny*)
sl@0
  1078
	{
sl@0
  1079
	asm("nop ");
sl@0
  1080
	// VEXT.8 D0, D1, D2, #3
sl@0
  1081
	asm(".word 0xF2B10302 ");
sl@0
  1082
	asm("mov r0, #0 ");
sl@0
  1083
	__JUMP(,lr);
sl@0
  1084
	}
sl@0
  1085
sl@0
  1086
__NAKED__ TInt NeonWithF3(TAny*)
sl@0
  1087
	{
sl@0
  1088
	asm("nop ");
sl@0
  1089
	// VDUP.8 D0, D1[2]
sl@0
  1090
	asm(".word 0xF3B50C01 ");
sl@0
  1091
	asm("mov r0, #0 ");
sl@0
  1092
	__JUMP(,lr);
sl@0
  1093
	}
sl@0
  1094
sl@0
  1095
__NAKED__ TInt NeonWithF4x(TAny*)
sl@0
  1096
	{
sl@0
  1097
	asm("adr r2, 1f ");
sl@0
  1098
	// VLD1.8 {D0[1]}, r2
sl@0
  1099
	asm(".word 0xF4E2002F ");
sl@0
  1100
	asm("mov r0, #0 ");
sl@0
  1101
	__JUMP(,lr);
sl@0
  1102
	asm("1: ");
sl@0
  1103
	asm(".word 0x12345678" );
sl@0
  1104
	}
sl@0
  1105
sl@0
  1106
__NAKED__ TInt ThumbMode(TAny*)
sl@0
  1107
	{
sl@0
  1108
#if defined(__SUPPORT_THUMB_INTERWORKING)
sl@0
  1109
	asm("adr r2, 1f "); // Store a test value address
sl@0
  1110
sl@0
  1111
	asm("mov r1, #1 "); // r1 = 1
sl@0
  1112
	asm("add r1, r0, lsl #3 "); // Add the arg * 8 to r1
sl@0
  1113
sl@0
  1114
	asm("mov r0, #0 "); // Store a return value of KErrNone
sl@0
  1115
sl@0
  1116
	asm("add r1, pc, r1 "); // Add pc to get jump destination
sl@0
  1117
	asm("bx r1 "); // Switch to thumb mode
sl@0
  1118
sl@0
  1119
	asm(".code 16 ");
sl@0
  1120
	// Thumb mode so halfwords reversed
sl@0
  1121
	asm(".word 0x0A10EC41 "); // VMOV S0, S1, r0, r1
sl@0
  1122
	asm("bx lr ");
sl@0
  1123
	asm("nop ");
sl@0
  1124
	asm(".word 0x0B00ED12 "); // VLDR D0, [r2]
sl@0
  1125
	asm("bx lr ");
sl@0
  1126
	asm("nop ");
sl@0
  1127
	asm(".word 0x8A00EE30 "); // VADD.32 S0, S0, S0
sl@0
  1128
	asm("bx lr ");
sl@0
  1129
	asm("nop ");
sl@0
  1130
	asm(".word 0x0302EFB1 "); // VEXT.8 D0, D1, D2, #3
sl@0
  1131
	asm("bx lr ");
sl@0
  1132
	asm("nop ");
sl@0
  1133
	asm(".word 0x002FF9E2 "); // VLD1.8 {D0[1]}, r2
sl@0
  1134
	asm("bx lr ");
sl@0
  1135
	asm("nop ");
sl@0
  1136
	asm(".word 0x0C01FFB5 "); // VDUP.8 D0, D1[2]
sl@0
  1137
	asm("bx lr ");
sl@0
  1138
	asm("nop ");
sl@0
  1139
#endif
sl@0
  1140
	asm("mov r0, #1 "); // Change ret to "done"
sl@0
  1141
	__JUMP(,lr);
sl@0
  1142
sl@0
  1143
	asm(".code 32 ");
sl@0
  1144
	asm("1: ");
sl@0
  1145
	asm(".word 0x12345678" );
sl@0
  1146
	}
sl@0
  1147
sl@0
  1148
#endif // __TEST_VFPV3