1 /*
2  * Copyright (C) by Argonne National Laboratory
3  *     See COPYRIGHT in top-level directory
4  */
5 
6 #include "mpidimpl.h"
7 #include "ch4_impl.h"
8 
MPIDIG_get_context_index(uint64_t context_id)9 int MPIDIG_get_context_index(uint64_t context_id)
10 {
11     int raw_prefix, idx, bitpos, gen_id;
12 
13     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_GET_CONTEXT_INDEX);
14     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_GET_CONTEXT_INDEX);
15 
16     raw_prefix = MPIR_CONTEXT_READ_FIELD(PREFIX, context_id);
17     idx = raw_prefix / MPIR_CONTEXT_INT_BITS;
18     bitpos = raw_prefix % MPIR_CONTEXT_INT_BITS;
19     gen_id = (idx * MPIR_CONTEXT_INT_BITS) + (31 - bitpos);
20 
21     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_GET_CONTEXT_INDEX);
22     return gen_id;
23 }
24 
MPIDIG_generate_win_id(MPIR_Comm * comm_ptr)25 uint64_t MPIDIG_generate_win_id(MPIR_Comm * comm_ptr)
26 {
27     uint64_t ret;
28 
29     MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDIG_GENERATE_WIN_ID);
30     MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDIG_GENERATE_WIN_ID);
31 
32     /* context id lower bits, window instance upper bits */
33     ret = 1 + (((uint64_t) comm_ptr->context_id) |
34                ((uint64_t) ((MPIDIG_COMM(comm_ptr, window_instance))++) << 32));
35 
36     MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDIG_GENERATE_WIN_ID);
37     return ret;
38 }
39