Changeset 9e1c942 in mainline for arch/ia64/src


Ignore:
Timestamp:
2006-03-15T18:25:45Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9a2d6e1
Parents:
8e0eb63
Message:

Itanium FPU active context switch

Location:
arch/ia64/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/src/dummy.s

    r8e0eb63 r9e1c942  
    3333.global cpu_sleep
    3434.global dummy
    35 .global fpu_enable
    36 .global fpu_disable
    37 .global fpu_init
    3835
    3936calibrate_delay_loop:
    4037asm_delay_loop:
    4138cpu_sleep:
    42 fpu_init:
    43 fpu_enable:
    44 fpu_disable:   
    4539
    4640dummy:
  • arch/ia64/src/fpu_context.c

    r8e0eb63 r9e1c942  
    2929
    3030#include <fpu_context.h>
     31#include <arch/register.h>
    3132#include <print.h>
    3233
    3334void fpu_context_save(fpu_context_t *fctx){
    34                 return;
    3535                asm volatile(
    3636                        "stf.spill [%2]=f2,0x80\n"
     
    189189void fpu_context_restore(fpu_context_t *fctx)
    190190{
    191                 return;
    192191                asm volatile(
    193192                        "ldf.fill f2=[%2],0x80\n"
     
    344343}
    345344
    346 
    347 
     345void fpu_disable(void)
     346{
     347                asm volatile(
     348                        "ssm %0;;\n"
     349                        "srlz.i\n"
     350                        "srlz.d;;\n"
     351                        :
     352                        :"i" (PSR_DFL_MASK|PSR_DFH_MASK)
     353                );
     354
     355}
     356
     357void fpu_enable(void)
     358{
     359                asm volatile(
     360                        "rsm %0;;\n"
     361                        "srlz.i\n"
     362                        "srlz.d;;\n"
     363                        :
     364                        :"i" (PSR_DFL_MASK|PSR_DFH_MASK)
     365                );
     366
     367}
     368
     369void fpu_init(void)
     370{
     371                __u64 a = 0;
     372                fpu_enable();
     373                asm volatile
     374                (
     375                        "mov %0=ar.fpsr;;\n"
     376                        "or %0=%0,%1;;\n"
     377                        "mov ar.fpsr=%0;;\n"
     378                        : "+r" (a)
     379                        : "r" (0x38)
     380                );
     381               
     382                asm volatile(
     383                        "mov f2=f0\n"
     384                        "mov f3=f0\n"
     385                        "mov f4=f0\n"
     386                        "mov f5=f0\n"
     387                        "mov f6=f0\n"
     388                        "mov f7=f0\n"
     389                        "mov f8=f0\n"
     390                        "mov f9=f0\n"
     391
     392                        "mov f10=f0\n"
     393                        "mov f11=f0\n"
     394                        "mov f12=f0\n"
     395                        "mov f13=f0\n"
     396                        "mov f14=f0\n"
     397                        "mov f15=f0\n"
     398                        "mov f16=f0\n"
     399                        "mov f17=f0\n"
     400                        "mov f18=f0\n"
     401                        "mov f19=f0\n"
     402
     403                        "mov f20=f0\n"
     404                        "mov f21=f0\n"
     405                        "mov f22=f0\n"
     406                        "mov f23=f0\n"
     407                        "mov f24=f0\n"
     408                        "mov f25=f0\n"
     409                        "mov f26=f0\n"
     410                        "mov f27=f0\n"
     411                        "mov f28=f0\n"
     412                        "mov f29=f0\n"
     413
     414                        "mov f30=f0\n"
     415                        "mov f31=f0\n"
     416                        "mov f32=f0\n"
     417                        "mov f33=f0\n"
     418                        "mov f34=f0\n"
     419                        "mov f35=f0\n"
     420                        "mov f36=f0\n"
     421                        "mov f37=f0\n"
     422                        "mov f38=f0\n"
     423                        "mov f39=f0\n"
     424
     425                        "mov f40=f0\n"
     426                        "mov f41=f0\n"
     427                        "mov f42=f0\n"
     428                        "mov f43=f0\n"
     429                        "mov f44=f0\n"
     430                        "mov f45=f0\n"
     431                        "mov f46=f0\n"
     432                        "mov f47=f0\n"
     433                        "mov f48=f0\n"
     434                        "mov f49=f0\n"
     435
     436                        "mov f50=f0\n"
     437                        "mov f51=f0\n"
     438                        "mov f52=f0\n"
     439                        "mov f53=f0\n"
     440                        "mov f54=f0\n"
     441                        "mov f55=f0\n"
     442                        "mov f56=f0\n"
     443                        "mov f57=f0\n"
     444                        "mov f58=f0\n"
     445                        "mov f59=f0\n"
     446
     447                        "mov f60=f0\n"
     448                        "mov f61=f0\n"
     449                        "mov f62=f0\n"
     450                        "mov f63=f0\n"
     451                        "mov f64=f0\n"
     452                        "mov f65=f0\n"
     453                        "mov f66=f0\n"
     454                        "mov f67=f0\n"
     455                        "mov f68=f0\n"
     456                        "mov f69=f0\n"
     457
     458                        "mov f70=f0\n"
     459                        "mov f71=f0\n"
     460                        "mov f72=f0\n"
     461                        "mov f73=f0\n"
     462                        "mov f74=f0\n"
     463                        "mov f75=f0\n"
     464                        "mov f76=f0\n"
     465                        "mov f77=f0\n"
     466                        "mov f78=f0\n"
     467                        "mov f79=f0\n"
     468
     469                        "mov f80=f0\n"
     470                        "mov f81=f0\n"
     471                        "mov f82=f0\n"
     472                        "mov f83=f0\n"
     473                        "mov f84=f0\n"
     474                        "mov f85=f0\n"
     475                        "mov f86=f0\n"
     476                        "mov f87=f0\n"
     477                        "mov f88=f0\n"
     478                        "mov f89=f0\n"
     479
     480                        "mov f90=f0\n"
     481                        "mov f91=f0\n"
     482                        "mov f92=f0\n"
     483                        "mov f93=f0\n"
     484                        "mov f94=f0\n"
     485                        "mov f95=f0\n"
     486                        "mov f96=f0\n"
     487                        "mov f97=f0\n"
     488                        "mov f98=f0\n"
     489                        "mov f99=f0\n"
     490
     491                        "mov f100=f0\n"
     492                        "mov f101=f0\n"
     493                        "mov f102=f0\n"
     494                        "mov f103=f0\n"
     495                        "mov f104=f0\n"
     496                        "mov f105=f0\n"
     497                        "mov f106=f0\n"
     498                        "mov f107=f0\n"
     499                        "mov f108=f0\n"
     500                        "mov f109=f0\n"
     501
     502                        "mov f110=f0\n"
     503                        "mov f111=f0\n"
     504                        "mov f112=f0\n"
     505                        "mov f113=f0\n"
     506                        "mov f114=f0\n"
     507                        "mov f115=f0\n"
     508                        "mov f116=f0\n"
     509                        "mov f117=f0\n"
     510                        "mov f118=f0\n"
     511                        "mov f119=f0\n"
     512
     513                        "mov f120=f0\n"
     514                        "mov f121=f0\n"
     515                        "mov f122=f0\n"
     516                        "mov f123=f0\n"
     517                        "mov f124=f0\n"
     518                        "mov f125=f0\n"
     519                        "mov f126=f0\n"
     520                        "mov f127=f0\n"
     521
     522                );
     523
     524                fpu_enable();
     525}
     526
  • arch/ia64/src/interrupt.c

    r8e0eb63 r9e1c942  
    4343#include <syscall/syscall.h>
    4444#include <print.h>
     45#include <proc/scheduler.h>
    4546
    4647#define VECTORS_64_BUNDLE       20
     
    174175}
    175176
     177
     178void disabled_fp_register(__u64 vector, istate_t *istate)
     179{
     180#ifdef CONFIG_CPU_LAZY
     181        scheduler_fpu_lazy_request();   
     182#endif
     183}
     184
     185
     186void nop_handler(__u64 vector, istate_t *istate)
     187{
     188}
     189
     190
     191
    176192/** Handle syscall. */
    177193int break_instruction(__u64 vector, istate_t *istate)
  • arch/ia64/src/ivt.S

    r8e0eb63 r9e1c942  
    434434        HEAVYWEIGHT_HANDLER 0x5300
    435435        HEAVYWEIGHT_HANDLER 0x5400 general_exception
    436         HEAVYWEIGHT_HANDLER 0x5500
     436        HEAVYWEIGHT_HANDLER 0x5500 disabled_fp_register
    437437        HEAVYWEIGHT_HANDLER 0x5600
    438438        HEAVYWEIGHT_HANDLER 0x5700
     
    442442        HEAVYWEIGHT_HANDLER 0x5b00
    443443        HEAVYWEIGHT_HANDLER 0x5c00
    444         HEAVYWEIGHT_HANDLER 0x5d00
     444        HEAVYWEIGHT_HANDLER 0x5d00 
    445445        HEAVYWEIGHT_HANDLER 0x5e00
    446446        HEAVYWEIGHT_HANDLER 0x5f00
Note: See TracChangeset for help on using the changeset viewer.